CSP-S2游记

CSP-S2

说实话,考前还是挺有信心的,CSP的题怎么说也应该比NOIP简单吧,至少之前做了挺多提高组的题,至少也拿个两百分吧?
然后GG。

星期五下午就从高铁站出发往考点去,没有带笔记本所以一下午和第二天一早上都在颓,考前又翻了翻蓝皮一本通,大概就看了看什么线段树,树状数组一类的(可以说基本都没考),下午怀着激动而忐忑的心情进了考场。

下面就写一点做题感受和考场思路以供参考吧。
—————————————————————————
整场考试时长四个小时,中间我紧张的一直在喝水,甚至说上厕所都感觉时间不够,加上监考老师一直在转,我最后一个小时打代码手都是抖的。

代码随后更新

T1
从考场出来以后,这道题应该是抱怨最多的。对于我而言,我写的就是强行模拟,大概到考完试打了一百七十多行(后面实在做不出来就去做剩下的题了),听别的OIer说打了有三四百行?这道题估计能拿前面公元前的全部分吧。(这题打了我两个小时,经典折磨)

T2
这道题现在想出了一个更加简单的方法,但是考场上用的就是先处理出需要买的饲料,然后从第0号开始枚举到第2^k-1种动物,中间带一些剪枝的搜索,结果脑抽把dfs函数一个调用写成了return,后来没时间也没改回来,估计只能混样例分。
我认为更简单的方法:所有转二进制用位运算降低时间复杂度,处理清单不变,然后对于没有饲养的动物,直接转成同样长度的二进制01串,与清单的01串进行按位&操作,满足条件就ans++。
再度更简单的方法:根据已经购买的饲料与指南上理论的饲料个数,通过组合数学求出剩余的个数

#include<bits/stdc++.h>
using namespace std;
int n,m,c,k,p,q,s[100],cp[10000050],cc[10000050];
unsigned long long ans,num;
int f;
int main()
{
	cin>>n>>m>>c>>k;
	f=n;
	for(int i=1;i<=n;i++)
	{
		cin>>num;
		if(num%2) s[0]=1;
		int cnt=1;
		while(num)
		{
			if((num>>1)&1)
			s[cnt]=1;
			num>>=1;
			cnt++;
		}
	}
	for(int i=1;i<=m;i++)
	{
	cin>>p>>q;
	if(s[p]) cc[p]=1;
	else 	 cp[p]=1;
	}
	for(int i=0;i<=100;i++)
	{
		if(cp[i]) k--;
	}
	unsigned long long q;
	if(k==64) 
	{
	if(f==0)
	{
	printf("18446744073709551616");
	return 0;
	}
	else
	{
	ans=18446744073709551615-f+1;
	cout<<ans;
	return 0;
	}
	}
	ans=1;
	ans<<=k;
	ans-=f; 
	cout<<ans;
	return 0;
} 

T3
这道题是刚打开四道题时过了一眼,只看1和2的操作感觉像是线段树,但是一看3操作我直接懵了,基本没有头绪,因为时间不够也没有拿上部分分。

T4
初看这题觉得还是没啥感觉(但是洛谷上这道题好像给的是省选/NOI-难度),大概是个有反悔的贪心?蛇可以吃,如果吃了会被吃就不吃,然后次强蛇也可以吃,如果还是会被吃就不吃(无限套娃),不断通过这样判断得到结果,然而没做出正解。

最后从考场出来我其实有点崩溃的,感觉自己这段时间复习的什么的都没有拿到回报,而且因为肝T1时间太长后面的题部分分也没拿上。去高铁站的路上,感觉晚上的风真的好冷。随后一个星期大概会在机房肝一下这四道题的代码,然后文化课也要好好补起来啊,这次文化课名次也下滑的厉害,一切都要努力啊。
所幸去NOIP还有两个推荐名额,刚好能把我和No_wonder_推荐上,再努力一个月,争取NOIP夺回属于自己的荣誉。

附No_wonder_的博客:
https://blog.csdn.net/m0_46207148/article/details/109011587

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值