CSP-S 2021 爆零记

本文记录了作者参加CSP-S 2021编程竞赛的经历,从考前准备到考试当天的详细过程,包括在考试中遇到的问题和心态变化。作者分享了自己对四道题目的思考与解题策略,以及考后的反思,强调了细心观察和深入思考的重要性。
摘要由CSDN通过智能技术生成

第一次考csp,去年高一决赛都没进 ,csp在爆零的边缘徘徊。

下文游记按时间顺序记叙,题解反思在最后面

游记

10.22

考试前一天,感觉脑袋已经转不过来了,早上就随便敲了几个模板 (一个没用到) 。下午打了会儿pingpong,然后提前放不上晚自习,看了会儿hky和kl打球就回家摸鱼了,然后早早睡了个觉。

10.23

考前

好像11点才醒,然后吃了个饭就赶去学校了,感觉头晕眼花,危。
然后下午1点左右就到了考场门口,在外面傻站了1个小时左右。。。
2点左右进了学校,听他们说pj考了四道模拟,我感觉不妙,不会tg要考四道思维吧 。然后匆匆忙忙进了考场,好挤呀,机房电脑都挨着的,人挨人,我旁边坐了两个初中的,一个好像才初二。然后往讲台方向看,靠讲台看到了josh的身影,带上帽子一股AK之气。
我检查了一下cena,然后开始调我的阴间Dev背景,清晰的记得47,56,60。然后敲了个缺省源。
然而这竟然是我提前退不退役的关键时候。
考完之后我翻洛谷帖子,看到了一个一个贴,说什么“为什么#include<bits\stdc++.h>本地可以过,windows可以,Linux不行?”(详见这里)。
谢谢,已经开始慌了,我从来都直接用缺省源,考试前一天才记了一下头文件,快读,考试的时候又只打了一遍,剩下的都直接复制粘贴,根本想不起对不对。然后我洛谷上试了一下:\ 本机不报错,交上去直接CE ,冒汗 。然后我回忆了一下当时,但啥都记不起来。接着试着重新敲一遍头文件,但仿佛我敲 \ 的概率大一点,小指刚好能碰到,而且眼睛也看的到那个键,一晚上没睡好。
最后看源码,那是我离退役最近的时候,幸好老天保佑,暂时还活着。。。

开考

2:30的时候把题发了,但我不知道怎么找,看旁边初中同学操作飞快,就照着他找到了题。
大概花了20分钟想T1,没有半毛钱思路,唯一的单调性是一个机场廊桥增加停靠飞机数不降 ,有个锤子用但是飞机是否能停不是一个单调的(至少我当时是这么认为的),所以直接放弃思考敲了个暴力。

#include<bits/stdc++.h>
using namespace std;

const int N=10010;
int n,m1,m2,f1[N],f2[N],b[N<<2],uni,ans;
int q[N],l,r;
struct Node{
   
	int l,r;
}s1[N],s2[N];

int bit[N<<2];
inline int lowbit(const int x){
   
	return x&-x;
}
inline void add(int x,const int v){
   
	while(x<=uni+1) bit[x]+=v,x+=lowbit(x);
}
inline int sum(int x){
   
	int res=0; while(x) res+=bit[x],x-=lowbit(x); return res;
}

inline bool cmp(const Node &x,const Node &y){
   
	return x.l<y.l;
}
#define gc getchar()
#define in read()
inline int read(){
   
	int f=1,k=0; char cp=gc; while(cp!='-'&&(cp<'0'||cp>'9')) cp=gc; if(cp=='-') f=-1,cp=gc;
	while(cp>='0'&&cp<='9') k=(k<<3)+(k<<1)+cp-48,cp=gc; return f*k; 
}
int main(){
    
	freopen("airport.in","r",stdin),freopen("airport.out","w",stdout); 
	n=in,m1=in,m2=in; 
	for(int i=1;i<=m1;i++) b[++uni]=s1[i].l=in,b[++uni]=s1[i].r=in; 
	for(int i=1;i<=m2;i++) b[++uni]=s2[i].l=in,b[++uni]=s2[i].r=in;
	sort(b+1,b+uni+1),uni=unique(b+1,b+uni+1)-b-1;;
	for(int i=1;i<=m1;i++) s1[i].l=lower_bound(b+1,b+uni+1,s1[i].l)-b,s1[i].r=lower_bound(b+1,b+uni+1,s1[i].r)-b;
	for(int i=1;i<=m2;i++) s2[i].l=lower_bound(b+1,b+uni+1,s2[i].l)-b,s2[i].r=lower_bound(b+1,b+uni+1,s2[i].r)-b;
	sort(s1+1,s1+m1+1,cmp),sort(s2+1,s2+m2+1,cmp);
	for(int lim=1;lim<=m1;lim++){
    memset(bit,0,sizeof(bit));
		for(int i=1;i<=m1;i++){
    int l=s1[i].l,r=s1[i].r;
			if(sum(l)<lim) ++f1[lim],add(l,1),add(r+1,-1);
		}
	}
	for(int lim=1;lim<=m2;lim++){
    memset(bit,0,sizeof(bit));
		for(int i=1;i<=m2;i++){
    int l=s2[i].l,r=s2[i].r;
			if(sum(l)<lim) ++f2[lim],add(l,1),add(r+1,-1);
		}
	}
 	ans=0; for(int j=0;j<=n;j++) ans=max(ans,f1[min(m1,j)]+f2[min(m2,n-j)]); printf("%d\n",ans);
	
	return 0;
}

一个愚蠢的 O ( n 2 l o g ) O(n^2log) O(n2log)的做法,仿佛能拿40分,但是测强点的数据就只有20了,直接T掉。

然后开T2,看着这么长的题脑袋大了,读了两遍题感觉啥都没读懂 (根我读语文课文差不多),可能又过去了10分钟 。就果断先开T3了。

T3个人认为唯一的方法就是找性质 ,因为我不会任何其它的方法 。然后缓缓的找了10几分钟就找到了,就是“另一个”一定会一直连成一块,就无脑的敲了个四指针的暴搜,总感觉会T。然后非常不自信的把T=1的点直接输出-1,洛谷测就挂了8分。

#include<bits/stdc++.h>
using namespace std;

#define pii pair<int,int>
#define fi first
#define se second
const int N=1e6+10;
int T,n,a[N]; pii pos[N]; 
bool use[N],flag;
bool sta[N]; int top; int staa[N];

inline void init(){
   
	memset(pos,0,sizeof(pos)); top=0; memset(use,0,sizeof(use)); flag=0;
}
inline int find(const int i){
   
	if(i!=pos[a[i]].fi) return pos[a[i]].fi; else return pos[a[i]].se;
}
inline void dfs(const int l,const int r,const int l1,const int r1,const int cnt){
   
	if(cnt<<1==n){
   
		for(int i=1;i<=top;i++) printf(sta[i]?"R":"L");
		int x=l1,y=r1;
		for(int i=top;i>=1;i--){
   
			if(staa[i]==x) printf("L"),++x; else printf("R"),--y;
		} puts("");
		flag=1; return; 
	}
	if(!use[l]){
   
	    int p=find(l); 
	    if(!use[p]){
    
			use[l]=use[p]=1;
			if(!l1&&!r1){
   
				sta[++top]=0,staa[top]=p,dfs(l+1,r,p,p
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值