重庆 CCPC 游记
_MiyazonoKaori_ · · 生活·游记
审流:过题数 6 题,但罚时 1237min。
Day -?:
知道了初二只有我一个去重庆 CCPC 的坏消息,所以我就是躺赢狗。
Day -2:
发现比赛当天是半期的体考,直接爽翻了。
Day 0:
8:30 左右(记不得了):到了重大;
8:40-9:50:签到,顺便拿了个包和一件衣服;
10:00:开题。
三个人一个从前面开,一个从后面开,一个从中间开。
拿到 L,思考了一下,等 yzc 把 F 秒了就开始写。
第一遍:写了一个栈,交了发现段错误,推了一下发现如果不复制栈里面的元素,只将答案乘 2 的话可能会删完。
第二遍:写了一个 vector,交了一遍发现答案错误,下面是重现的赛时代码(大概吧):
#include<bits/stdc++.h>
using namespace std;
vector<int>vec;
int ans=0;
const int MOD=998244353;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
string s;
cin>>s;
if(s=="Push"){
int x;
cin>>x;
vec.push_back(x);
ans+=x;
ans%=MOD;
cout<<ans<<endl;
}else if(s=="Pop"){
ans-=vec.back();
vec.pop_back();
ans%=MOD;
cout<<ans<<endl;
}else{
if(vec.size()<=n/2+1){
vec.insert(vec.end(), vec.begin(), vec.end());
}
ans*=2;
ans%=MOD;
cout<<ans<<endl;
}
for(int i=0;i<vec.size();i++){
cout<<vec[i]<<' ';
}cout<<endl;
}
return 0;
}
看起来没什么问题,但还是 WA;
于是……第三遍:
jch 认为可能是 vector 的问题,于是就改成了普通数组,但是还是 WA;
最后经过一堆自己造的大样例的测试,发现:
ans-=vec.back();
vec.pop_back();
ans%=MOD;
可能是负数!
于是:
ans=(ans-vec.back())%MOD+MOD;
vec.pop_back();
ans%=MOD;
然后过了,但是
11:05:切掉了 C;
12:06:我在旁边手写 L 代码,然后听到了 jch 和 yzc 在激烈的讨论 A,然后写完代码,WA。
jch:打个暴力试试?
12:27:
评测机:AC。
后来……
yzc:貌似暴力的时间复杂度比我们第一个代码要小……
13:09:干掉 H;
13:36:终于搞完 L;
13:40:开始看 B:
我一开始是看了 B 的,读完题就想到了网络流(为什么呢?),然后一看时间复杂度
然后想到贪心或者 DP,思考了一下后发现貌似 DP 不行,然后跟 jch 讨论了一下,想到用单调优先队列,简单设计了一下就开始打代码。
测完样例直接交,然后不出意料的 WA。
然后开始调代码,发现了一些细节错误,改完之后还是 WA,然后我开始造样例,然后造出来一个 1 1 1 的逆天样例,虽然数据范围表示不可能,但是程序输出了 2,接着添加了出入站口必须不同的判断,一发还是 WA,然后 jch 直接删掉了所有的判断特殊情况的语句,然后 AC 了(本躺赢狗还是不知道为什么能 A)。
此时 14:56,想到了 D 的思路但是没打完。
6 道题,罚时 1237,荣获 6 题倒一,遗憾退场。
排行榜,队名“罚坐三人组”,rk51(有分队伍 rk34 的下面),打星队伍。
杂项:
其他两个队伍一个 rk25(3 分钟 A 两题,B 和 D,还是太强势了,Orz),一个 rk73。
开始后 1 小时,三支队伍都只 A 了一道,带队老师看外榜时想跳河。