社区讨论
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 条回复,欢迎继续交流。
正在加载回复...