社区讨论

MLE?

P7374 [COCI2018-2019#5] Titlovi参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo2bce7p
此快照首次捕获于
2023/10/23 11:03
2 年前
此快照最后确认于
2023/11/03 11:13
2 年前
查看原帖
为何MLE?下载数据1。
两千多kb,听取MLE?
也不是\n\r的问题啊。
CPP
#include<bits/stdc++.h>
using namespace std;
int n;
string x;
int numberstart;
string temp;
typedef struct
{
	int h,m,s,ms;
}instance;
typedef struct
{
	instance start,finish;
}duration;
vector<duration>a;
vector<string>word;
int offset;
int toi(string str)
{
	int x=0;
	for(int i=0,l=str.size();i<l;i++)
		x=x*10+str[i]-'0';
	return x;
}
string lenbuild(int len,string str)
{
	while(str.size()<len)
		str.insert(0,"0");
	return str;
}
string build(instance x)
{
	return lenbuild(2,to_string(x.h))+":"+lenbuild(2,to_string(x.m))+":"+lenbuild(2,to_string(x.s))+","+lenbuild(3,to_string(x.ms));
}
string repair(duration x)
{
	return build(x.start)+" --> "+build(x.finish);
}
main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	getline(cin,x);//初始编号
	n++;
	numberstart=toi(x);
	while(true)
	{
		getline(cin,temp);//时间
		string str;
		string wordtmp="";
		duration tmp;
		tmp.start.h=toi(temp.substr(0,2));
		tmp.start.m=toi(temp.substr(3,2));
		tmp.start.s=toi(temp.substr(6,2));
		tmp.start.ms=toi(temp.substr(9,3));
		tmp.finish.h=toi(temp.substr(17,2));
		tmp.finish.m=toi(temp.substr(20,2));
		tmp.finish.s=toi(temp.substr(23,2));
		tmp.finish.ms=toi(temp.substr(26,3));
		a.push_back(tmp);
		getline(cin,wordtmp);//说的第一句话
		bool flag=false;
		while(true)
		{
			getline(cin,str);
			if(str=="")//如果说话结束
				break;
			if(str=="#")//如果输入结束
			{
				flag=true;
				break;
			}
			wordtmp+="\n"+str;
		}
		word.push_back(wordtmp);
		if(flag) break;
		getline(cin,x);//下一个编号
		n++;
	}
	cin>>offset;
	int ii=0;
	if(offset>=0)
		for(auto it:a)
		{
			it.start.ms+=offset;
			if(it.start.ms>=1000)
				it.start.s+=it.start.ms/1000,it.start.ms%=1000;
			if(it.start.s>=60)
				it.start.m+=it.start.s/60,it.start.s%=60;
			if(it.start.m>=60)
				it.start.h+=it.start.m/60,it.start.m%=60;
			if(it.start.h>=24)
				it.start.h%=24;
			it.finish.ms+=offset;
			if(it.finish.ms>=1000)
				it.finish.s+=it.finish.ms/1000,it.finish.ms%=1000;
			if(it.finish.s>=60)
				it.finish.m+=it.finish.s/60,it.finish.s%=60;
			if(it.finish.m>=60)
				it.finish.h+=it.finish.m/60,it.finish.m%=60;
			if(it.finish.h>=24)
				it.finish.h%=24;
			a[ii]=it;
			ii++;
		}
	if(offset<0)
		for(auto it:a)
		{
			it.start.ms+=offset;
			if(it.start.ms<0)
				it.start.s-=((-it.start.ms)/1000+1),it.start.ms=1000+it.start.ms;
			if(it.start.s<0)
				it.start.m-=((-it.start.s)/60+1),it.start.s=60+it.start.s;
			if(it.start.m<0)
				it.start.h-=((-it.start.m)/60+1),it.start.m=60+it.start.m;
			if(it.start.h<0)
				it.start.h=24+(-((-it.start.h)%24));
			it.finish.ms+=offset;
			if(it.finish.ms<0)
				it.finish.s-=((-it.finish.ms)/1000+1),it.finish.ms=1000+it.finish.ms;
			if(it.finish.s<0)
				it.finish.m-=((-it.finish.s)/60+1),it.finish.s=60+it.finish.s;
			if(it.finish.m<0)
				it.finish.h-=((-it.finish.m)/60+1),it.finish.m=60+it.finish.m;
			if(it.finish.h<0)
				it.finish.h=24+(-((-it.finish.h)%24));
			a[ii]=it;
			ii++;
		}
	int iii=0;
	int number=numberstart;
	for(auto it:a)
		cout<<number<<"\n",cout<<repair(it)<<"\n",cout<<word[iii]<<"\n"<<(number==numberstart+n-1?"#":"\n"),number++,iii++;
}
处理多行说话复杂了点,但不至于啊。

回复

3 条回复,欢迎继续交流。

正在加载回复...