csp-j2019游记
suxxsfe
2019-11-17 22:49:15
~~我一pj蒟蒻这点水平还来写游记?~~
算了,毕竟是第一次,记录一下吧
# noip->csp
话说我跟竞赛是不是天生八字不合啊......
小学的时候学小奥,等我开始报名比赛,当时似乎所有竞赛都被叫停了,就剩一个~~特别水~~的建模
初一学了OI,到初二准备参加普及组,可是......~~你们都知道~~,因此我就成了一个从未参加过noip的OIer
我真是个~~竞赛杀手~~
# csp-j2019
## day -34
luogu秋令营pj第一次膜你赛居然让我一个蒟蒻得了$rank1$,算是找回点信心吧.....
## day -29
明天就初赛了我居然还在熬夜补数学?
## day -28
**csp-j初赛**
本来这几天这天学校是要研学的,所以我们考初赛的就只好呆在学校了~~好像只有3个人这样欸~~
~~看我都为OI放弃研学了是不是应该让我AK?~~
中午在家看了看tg的题,复习了一下语法细节和排序相关的内容
济南是用机试,可能是因为报的人少?
话说那网页真的好卡......
不过今年初赛明显的改变就是终于没有那些~~令人厌恶的~~计算机历史了,多了对数学能力的考查
阅读程序也终于不再是只写结果了,虽然变成了全选择但难度我认为没降
其实这样也挺好,减少了考那些对OI没用东西,初赛也能一定程度上反应真实水平了
晚上还要上物理课.....
自测应该差不多80左右,群里的大佬说应该能过。
看到青岛当天就公布成绩了欸,看到大佬们都80+,90+,心里还是有点慌
## day -23
提前知道成绩了,85.5,居然比自己估的还高,而且我还是市第五欸
前面的单选错的不多,主要是最后一个补全程序和那些阅读程序太恶心了~~可能也是我太蒻~~
那些能90+的也太强了吧%%%
开始冲刺复赛......
## day -11&-10
期中考试,这几天基本没怎么学OI
怎么每年都和期中在同一段时间啊
像我们竞赛氛围不浓的弱省,平时能拿出点时间来学OI就不错了,期中附近自己想学学校、家长也不给这个时间啊
## day -2
luogu的最后一场膜你居然在工作日下午,话说这是我学OI以来第一次停课
感觉这次FMT没暑假那次有意思,可能更侧重考前答疑吧
晚上终于通过了pj练习场,~~数论题太毒瘤了~~
## day 0
上午做几道任务列表里的题,下午就去考场了
火车位置竟然还能排错,还要换车厢...
在宾馆刷几道dp,信心--
## day 1
没去报道,继续刷dp,感觉没啥用了
~~我和dp真是没缘~~
午觉醒来感觉更困了,看了看博客里exgcd的板子,但感觉可能用不上......
![](https://cdn.luogu.com.cn/upload/image_hosting/2e31837q.png?x-oss-process=image/resize,m_lfit,h_170,w_225)
进考场,调好编译器,可别人都有题就我电脑上没题是什么鬼?网也关了只能拿优盘考
~~我们考场居然还有不会文件读写的问监考怎么写freopen~~
读一遍题,感觉总体不难,至少没有去年摆渡车那种大dp
T1,字符串读入和简单处理,长度还是确定的,真是创了pjT1难度的新低
T2,只能算模拟吧,手写一个队列,如果是地铁就把时间和价格入队,是公交就先把过时的优惠卷出队,再依次查找符合条件的价格
我是把用过的优惠卷先不出队(否则容易超时),标记时间和价格为极小值,这样接下来就会被弹出
结果样例2就出问题了,这才发现编译器的调试不能用,一摁F5就error,只能手动输出变量调试了~~我可以把考不好赖在编译器身上吗?~~
我居然把$continue$都写成了$break$......
大样例还是没过。不管了直接看T3吧
果然是复杂的dp~~没思路,考完才知道并不太复杂~~
厕所是个好地方,你总能在那找到灵感思路~~然鹅我并没有~~
所以骗分:
- $t=1$直接输出m
- $n=1$和$n,t\leq4$,搜索,感觉过不了,我怎么连复杂度都没估计就开始写了啊~~dfs套dfs?也许我这个程序等量子计算机出世才能跑出样例来吧~~
- $t=2$完全背包,以两天的价格差为价值出考场才想起来输出忘加m了...
- 剩下的写了个很扯的dp,连样例都没过
~~果然我还是死在dp上了~~
回头看T2,突然发现我只改了用过优惠卷的时间没改价格,改完程序终于过了大样例~~光T2就调了一个多小时~~
看T4,自以为图论不错但还是只想到奇偶判断就不会写了
写了个爆搜,到1号就判奇偶性
期望得分:$100+100+10+40=250$
实际得分:$100+100+10+15=225$
不过为什么考试的时候膜你抄的旋律一直在脑海中回想
出考场,听大佬们说T3就是完全背包,之后恍然大悟,每一天是独立的,那不就是跑$t-1$个完全背包吗?
之后T4好像是记录点到1好点的路径奇偶之类的~~反正我不会~~
听kkk说这是pj最简单的一次~~那为什么我还不会QAQ~~
晚上吃饭的时候看洛谷上说T3T4都是原题欸,可惜我没做到
两道原题而且还是T3T4这CCF也太过分了吧......
晚上回去把那道[T3原题](https://www.luogu.org/problem/P2938)写了,才发现这题原来这么简单
其实这道题想不出真是不应该,$T=2$的部分分不就是提示吗。哎还是平时思考的太少(关于比赛的反思下面还会提到)
大佬们说今年pj真的简单了很多,心中也有点慌能不能上1=,毕竟我估的分也不一定能达到
## day 2
在回去的车上一直用手机看洛谷,各种300+的大佬还在装蒻......
![](https://cdn.luogu.com.cn/upload/image_hosting/5ypw5oqa.png?x-oss-process=image/resize,m_lfit,h_170,w_225) ![](https://cdn.luogu.com.cn/upload/image_hosting/mi6d23tc.png?x-oss-process=image/resize,m_lfit,h_170,w_225)
~~好像一共就留下这么几张模模糊糊的照片~~
晚上看到洛谷上好多初三高三的发了AFO的帖,希望他们都能在OI中有所获得吧。不过大学还有ACM呢
其实我毕竟才第一年,而且就算考不好也用不着AFO吧。~~心情终于好点了~~
~~明天就去上课了才发现还有一堆作业等着我~~
## day 3
继续写游记......
还有一堆周末辅导班的视频要看......
看到zcysky发的帖子也是感慨一番
虽然自己只入坑不到一年,但OI已经给我了不少改变 ~~文化课下降?~~
其实大多数人学OI为的肯定也不只是最后的那个奖吧,能和志同道合的一些人一同奋斗就已经是值得的了,所以享受这个过程吧
## day 4
游记终于基本写完了,语文不好太费劲了
~~而且一天天数日期真是太麻烦了~~
## day 7
牛客输考号查成绩只有$0+100+0+0=100$
全市连前50%都进不了,~~而且T1为什么会爆零呢?~~
一下午的好心情顿时没了。。。~~想知道为什么有好心情吗~~
## day 17
下午出成绩,$100+100+10+15=225$,还是比估的低了点,应该能1=吧
# 反思&总结&题目代码
T2调了一个多小时真是太浪费时间了....
其实也不是时间规划的问题,因为就算时间比预计的长了也不能放弃T2啊
所以以后写题的时候出了错尽量不要接着就跑到题解区去对照,那样对调试能力的提高真的不大。其实自认为考场上调试能力比代码能力有时候更重要吧,因为一个代码写出来调半天过不了在比赛上是很浪费的~~我太蒻了~~
而且不算太难的题本地多花点时间调一调,尽量一次AC
还有题解的问题,我感觉自己有时候就是太依赖题解了,即使不看代码好多题的思路还都是题解提供的。这就导致考场上即使比较简单的转换自己也完成不了
有时候自己想一道题稍微有点思路就想去题解区看看是否正确,其实这样虽然能减少一些时间,但对自己的提升真是少了好多。因为即使有的题有了点模糊的思路也不一定能实现出代码。
而且就算是错误的思路也能让自己总结出一些教训(比如往哪些方面思考必定时死胡同)之后避免吧
还是要多思考吧
所以我要立flag了,下次csp之前简单的蓝题和蓝题以下**不看题解不看题解不看题解**
T1,cin读入自认为最保险
```cpp
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<queue>
#define LL long long
#define R register
char s[15];
int main(){
std::freopen("number.in","r",stdin);
std::freopen("number.out","w",stdout);
std::cin>>s;
int ans=0;
for(R int i=0;i<8;i++) ans+=(s[i]=='1');
std::printf("%d",ans);
return 0;
}
```
T2,day 1中说了,t和ti是时间,pr和pri是价格
```cpp
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<queue>
#define LL long long
#define R register
int n;
LL t[100006],pr[100006];
int l=1,r=0;
LL ans;
int main(){
freopen("transfer.in","r",stdin);
freopen("transfer.out","w",stdout);
int bus=0,sub=0;
std::scanf("%d",&n);
for(R int i=1;i<=n;i++){
LL ty,pri,ti;std::scanf("%lld%lld%lld",&ty,&pri,&ti);
if(ty){//bus
bus++;
int flag=1;
for(;;l++){//find right time
if(l>r){
ans+=pri;
flag=0;break;
}
if(ti-t[l]<=45) break;
}
if(!flag) continue;flag=1;
R int use;
for(use=l;;use++){//find right price
if(use>r){
ans+=pri;
flag=0;break;
}
if(pr[use]>=pri) break;
}
if(!flag) continue;
t[use]=-99999999;pr[use]=-99999999;
}
else{//subway
sub++;
ans+=pri;
t[++r]=ti;
pr[r]=pri;
}
// std::printf("%lld l=%d r=%d i=%d n=%d\n",ans,l,r,i,n);
}
std::printf("%lld",ans);
return 0;
}
```
T3,~~t遍完全背包考场上为啥就没想到呢?。。。~~
```cpp
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstring>
#define R register
#define EN printf("\n")
#define LL long long
inline int read(){
int x=0,y=1;
char c=std::getchar();
while(c<'0'||c>'9'){if(c=='-') y=-1;c=std::getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^48);c=std::getchar();}
return x*y;
}
int n,m,t;
int w[106],v[106];
int f[10006];
inline void max(int &x,int y){(x<y)&&(x=y);}
int main(){
t=read()-1;n=read();m=read();
for(R int i=1;i<=n;i++) v[i]=read();
while(t--){
for(R int i=1;i<=n;i++){w[i]=v[i];v[i]=read();}
std::memset(f,0,sizeof f);
for(R int i=1;i<=n;i++)
for(R int j=0;j<=m;j++)
if(j>=w[i]) max(f[j],f[j-w[i]]+v[i]-w[i]);
m+=f[m];
}
std::printf("%d",m);
return 0;
}
```
T4,分别存奇偶最短路,注意一号点可能是孤立的,就是没有边与它相连。因此bfs初始要从与一号点相接的点开始
```cpp
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<queue>
#include<cstring>
#define R register
#define EN printf("\n")
#define LL long long
inline int read(){
int x=0,y=1;
char c=std::getchar();
while(c<'0'||c>'9'){if(c=='-') y=-1;c=std::getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^48);c=std::getchar();}
return x*y;
}
int n,m,qq;
int to[200006],fir[100006],nex[200006],tot;
int dis[100006][2];
inline void add(int u,int v){
to[++tot]=v;nex[tot]=fir[u];fir[u]=tot;
}
std::queue<int>q;
inline void bfs(){
std::memset(dis,0x3f,sizeof dis);
for(R int i=fir[1];i;i=nex[i])
dis[to[i]][1]=1,q.push(to[i]),q.push(1);
while(!q.empty()){
int u=q.front();q.pop();
int w=q.front();q.pop();
for(R int i=fir[u];i;i=nex[i]){
int v=to[i];
if(dis[v][!(w&1)]>w+1){
dis[v][!(w&1)]=w+1;
q.push(v);q.push(w+1);
}
}
}
}
int main(){
n=read();m=read();qq=read();
for(R int i=1;i<=m;i++){
int u=read(),v=read();add(u,v);add(v,u);
}
bfs();
while(qq--){
int a=read(),lev=read();
if(dis[a][lev&1]<=lev) std::puts("Yes");
else std::puts("No");
}
return 0;
}
```
### 最后以zcysky那个帖中的几句话结尾吧
> 愿你们的人生,除了算法竞赛的深度,还有ctf的广度。愿你走遍大江南北,带着一身技术,去做自己喜欢的事。
> 这一次,让我们不计输赢,只谈乐趣。
> code for win ×
hack for fun √
> 人活着,最重要的还是开心。
放下对输赢的执念,做个黑客吧
~~大多流水账,毕竟众所周知OIer的语文都不好~~