模拟赛总结

23-24 term1

9.17

最可惜的是t4:把b放在a后面就形成了一个长为2*m的LIS。我想到了LIS但是一直觉得无法保证长度为m所以直接hack掉自己的想法。。(虽然LIS时间复杂度10^7理论是可以过的。)太可惜了。

当然也可以搜索剪枝(你是傻子你不会dfs你别想了)

T2:转移方程脑子炸了想了好久,然后还没有考虑第i种花可以直接不摆的情况(k应该从0开始循环我脑抽了写的1。)

T3:先排序,往前面找可以表示它的数,因为每个数都可以用无数次,直接完全背包!!!(我那调了一个多小时的可行性背包啊。呜呜。当时心态直接崩溃了。)

一些心得:
第一题其实是最难的,一眼不会有点被搞心态。恰巧第二题是最简单的。当时心态有点炸,想了一个多重背包的做法发现想假了,心态直接崩溃。直接去看第三题第四题了,第三题直接完全背包,我当时甚至还看见了无穷多张纸币,但是没有往这个方面想,想了一个非正解做法发现一直过不去样例,陆陆续续调了T2和T3调了两个小时,好不容易T2过了已经心态全无直接摆烂,不然T4即使是输出样例都是可以拿20分的。

所以这个故事告诉我们,一定要稳住心态!!!!!!

9.24:评价是考太烂了,dp一个不会,没啥好写的,总结为人菜。


10.17,18,19

17号的题可以给中等难度;

第一题简单二分(但我边界写错了挂了50pts),第二题dfs+图论,第三题模拟(当时发现自己做法假了心态有点崩,所以数组开小了也一直没调出来),第四题是神秘dp。

收获是:不要慌(哪怕一个橙题模拟调3.3h也不要慌),把自己会写的分一定要写完。

时刻提醒自己:慌,但不能慌,可以深呼吸!!!保持最细心的状态!!心态炸了那调出来这道题的可能性也会随之减少。然后注意时间分配,先打暴力!!!每道题撑死给一个小时(不能超过1.5h),注意数据范围,不要挂分。


18号的题比较难(表现为大家都写的不太好)。

第一题是巨大多恶心的大模拟,第二题是数学题(类似线性筛?想到做法了但是写不出来),第三题,最短路,注意读题!!!以及spfa可以拿50!这就体现出板子熟练的重要性了。第四题,神秘状压dp,可以考虑骗分或者放弃了orz

收获是:其实考场上遇见大模拟先看:

1.能不能理清思路

2.有没有实现的具体方法

3.预估一下需要写多久?

4.考虑清楚细节了吗??

调的时候一样,先预估修改幅度和所需时间,如果发现风险很高,那么不要犹豫直接扔下,这时或许才过去1h或1.5h,打完剩下能拿的分时间是绝对够的。然后调整状态!不要被大模拟影响心态!你写不出来大家可能都面临调不出来的情况,全力冲剩下的分!!


19号的题较简单。

第一题,结论题。没什么实现难度吧。注意一下验证就行,多造几组小样例。第二题,字符串模拟,明明可以开临时变量我开的数组我还开小了!!!痛失60pts,第三题和第四题都比较难,第三题是离散化+前缀和思想,可喜可贺,拿了暴力分没冲出来正解。第四题是神秘区间dp,可喜可贺拿了特殊性质分。

收获是:不知道是因为今天的题比较简单吗还是因为什么,我觉得今天的答题策略还不错。

T1告诉我们:遇到题先不要慌,分析样例,思考性质,必要时可以猜测结论+打表验证。

T2告诉我们:冲模拟前一定要想好细节,想清楚了再写!!!一定要注意数组范围。

T3T4告诉我们:从特殊性质入手,先打暴力模拟,把自己能拿的分拿到。T3T4我打暴力拿90不比冲正解的差。(也可能是因为运气好它恰好能打暴力的原因orz)。

总之把自己会拿的分拿到,不会就直接模拟题意,可以适当进行骗分,争取做到不挂分。不被周围人影响心态。


20号的题还是很简单??

T1,神秘金币。一个有点类似于读题杀的东西,最开始思路有点错导致以为T1考背包dp,后来认真读完题发现因为t互不相同就是排个序然后选前k个的问题,简单题。

T2,也是结论题??和一定差小积大差大积小。然后字符串暴力枚举就行,也挺简单。

T3,小学奥数,用一下结论n/(k-1) 可以轻松解决,就是要写高精。其实哪怕不需要高精暴力都可以拿五十分之多。。

T4,神秘数据结构题,理解了题意就挺简单???最开始试图写模拟有一车细节所以放弃了。最后2h开始罚坐。

收获是:简单题快速切,一定不要读错题意啊!!!然后策略和以前一样:先打会的分,先打暴力。然后就好像没有然后了??还有就是注意时间分配,最后50min可以拿手造样例检查自己的程序!()


CSP2023


11.26:

挂大分的是T1!!!

简单题,做法假了/wx,找中位数写成了找不同的数,于是直接爆0,太炸裂了,太tm炸裂了。

T2运气好,手写了一个貌似是假的并查集,没被卡,哈哈。

T3又是dp,推不出来,T4 LCA,看不出来,不会,看题解努力改了。

收获是:一定不要相信自己的做法是一定对的,一定要多检查检查。然后就是注意数据范围。(原因是机房考完试传来了经久不绝的没开longlong的惨叫,警钟声惨绝钟寰。)


12.10 字符串专题

T1暴力,T2哈希,T3KMP,T4貌似是AC自动机吧(其实是可以用hash水过去的trie树上跑dp)。没什么好说的,考太低是因为我太菜qwq。

收获是:和大家的差距主要在T1和T2啊......T1是思维程度达不到,T2二分看不出来。但好事是暴力没挂分,以后还是要好好写暴力分,然后再想正解。可以从多个角度思考题的解法(比如哈希和其他算法的结合)。

啊啊啊啊啊没看出来二分真的我哭死。

T1

vocal。我把枚举len的那一层循环改成二分板子,它就过了,它就过了啊啊啊啊啊啊啊啊啊啊啊啊啊TT

T3暴力,我破防了


寒假集训part

2.18

T1场上一眼的思路,然后最开始取模出锅了,改改过了。比较简单。

T2!!最开始只会写O(nm)的暴力,然后发现只有40pts,于是一直在想单log或者O(n)算法,期间发现了二分但很快hack掉了(事实上正解就是二分+排序qwq),只能说没看出来,有点巧妙,以及不要过早hack掉自己的想法。

T2题解

T3,最开始以为简单模拟,后面发现有一个地方读错题了(把字符串看成单个字符),然后改了改。但是出来发现炸了!!!(虽然大家好像都炸了),正解是KMP or HASH+记忆化搜索吧,能力范围以外也尽力了,不多说了。

T3题解

T4,暴力写炸了??虽然只写了40pts的暴力但事实上最后只有10(?)打暴力的想法是好的继续保持,就是为什么会打炸。正解是容斥原理,比较抽象,尽力改改。

T4题解

收获是:今天发挥正常,不好也不差,起码算是尽力了吧。暴力分拿满,想题要专注,从多个角度都试试,写代码的时候不要慌,不要读错题!!


2.19

省流:dp*2+图论,大寄特寄,主打一个垫底。

T1,签到题吧我觉得,线筛板子(虽然忘了)加上前缀和,写写过了。

T2,动态规划,很一眼的思路。但是因为题读错了和dp推错了的debuff导致只有10pts,仔细分析了一下和大家的主要差距还是在T2。怎么大家都做出来了啊,怎么这么菜,呜呜。

T3,dp+组合数的神秘不可做题,打算骗分然后没骗到???怎么这么神奇。

T4,只会最短路骗分(以及板子不熟),正解是跑一遍最短路+tarjan求割边,不会也没想到/sad

T4题解

明天好像会停一天用来改题+按自己进度刷题,然后分析了一下我这两场考试,发现和高分的差距主要集中在T2,因为T1签到题太过简单,T3T4因为太难所以导致大家都不会,拉不开差距,所以得分的差距就是T2。然而dp仍然是我的短板(表现为题读错!!+非常显然的思路没太看出来)怎么说,思维能力还是要多练,明天没有考试,是好好思考的好时机(。)(update 2.20,事实上是颓了一天。。一直在颓题解,主打一个想不出来一点,加上内耗走神,一天效率都很低)

后天和大后天还有两次考试,现在已经觉得排行榜那个东西无所谓了,分低就是因为思维程度没有达到。

考完波波又在发表讲话,大致意思就是好好考试好好改题好好刷题,总会有提升的,想了想也没有别的办法了,就相信吧。


2.21

省流:真垫底了

十年OIxxx,不开long long见祖宗

T1,思路正确代码正确,没开longlong,痛失100分(如果加上这一百是不是本来可以rk10的啊就不用垫底了呜呜),如果没开longlong挂一分1km那么我大概要绕操场跑330圈,下次再也不忘开longlong了)

T2,一眼二分答案,但是没看清题(我三场模拟赛场场看错题,不考智力考视力是吧。)dp,不会,单调队列优化,不会,还改不出来,退役吧没救了。

T3,可以搜,不会,可以dp,没想到,正解就别说了,看都看不懂呢先呜呜。

T4,波波:这题解其实我也看的稀里糊涂的。但是我的暴力非常神秘地挂了20pts。

总结是好像T3T4拉不开差距,我的打暴力的策略并没有问题。以及十年OI一场空不开longlong见祖宗。

但好像改变不了给大家垫底的事实啊,呜呜。


2.22

T1是一道很有区分度的简单题,30min的时候突然一下就有思路了,只用在转的过程中维护它的上右前三个面,然后再找循环节就做完了!

T2,贪心模拟,脑残写错了memset的数组大小。

T3是最难的一道题!prufer生成树(x) 欧拉函数(√)

T4,正解折半搜索。用我的假做法竟然混到了满分???神奇,莫名其妙来的100pts,可能是rp守恒定律,昨天挂的100分今天又加回来了。

收获是暴力打满就是胜利,rk4,近期排名最高的一次虽然我也不知道怎么这么高的(?)

23-24 Term 2

3.10

省流:四道dp。

T1是一道模意义下的01背包, [USACO09MAR] Cow Frisbee Team S,最简单的一道。虽然我推的时候出了点愚蠢的问题。

T2,树形dp!求树的直径,树上最长链次长链的板子题。非常板子的up and down。

T3就开始神仙起来了!矩阵快速幂优化dp。HNOI2011数学作业

T4是神仙状压dp,近乎一点思路没有的毒瘤题。JXOI2012奇怪的道路,即使现在我都有点不理解dp转移方程。

总结:打暴力!靠自己推式子,积累做题技巧(如树形dp子树贡献直接想up and down)。


3.24

T1是shaber bfs题,就这我没想出来思路:),还拿数组写了好久,小丑。

T2,排列组合和一点概率期望,考场上推推推了好久未果,一看题解就会了!但是完全get不到正解思路,怎么回事呢。小魔女帕琪

思路:所以先在从1到7的位置下,概率为:(a1/n)*(a2/n-1)*....*(a7/n-6);

再放大一点考虑1~n中有n-6段连续的1~7;
  那么概率还要再乘上(n-6);
  
每七个位置中,a1~7的排布有7!种;
  
所以得出公式 E=7!*(n-6)* (a1/n)*(a2/n-1)*....*(a7/n-6)

T3是一道暴力可以拿高分的题(指我拿了60pts!)。最后一点优化比较难想。魔法阵

T4是区间dp和状压dp的结合!好题,虽然我考场上题没读懂/kk。字符合并

总结:暴力打满,想题要认真,不要一个简单优化想不到(T3),没思路可以考虑搜索。提高搜索能力,争取写出不死循环的深搜和广搜。


4.5

省流:蓝蓝紫紫,不爆零就是胜利。

开题,三道省选题,三道概率与期望直接给菜鸡干懵了qwq。

T1,聪明的燕姿,数学题,很难想。即使改过去了也需要花很多时间理解做法。

T2,概率和期望我觉得最简单的一道,注意次数和价格之间的转化。收集邮票

T3,个人觉得最难的一道,通过题解转化,理解了其实还好(赛时这道题骗都不想骗了,过于恶心了一些。。)好好理解也不难的题解。

T4,一眼线段树,可惜拿的分还没暴力多,直接joker拿下了(雾)!思路比较巧妙,拆开算贡献。代码没什么技术含量就是简单数据结构题。甚至1A(虽然颓了代码。。)T4 高速公路

总结就是这场好难好难/ll,感觉是近期考试最难的一场,分也很低,不过靠改题努力弥补了差距,没啥好说的菜就多练呗


5.2

省流:只会写模拟。

开场先看了一遍四道题,发现只有T1大模拟比较可做,于是准备全场冲一道题,冲出来了就还有救冲不出来就摆烂!花了2.5h冲出来了:)

T1 时间复杂度 ,注意细节,循环嵌套和对答案的贡献,先想明白了在写,不要上来直接莽,想到哪写到哪,容易出错。

T2 [CSP-S2019] Emiya 家今天的饭 ,容斥原理,从最不好满足的性质入手(即每种主要食材最多在一半的菜里使用),考虑通过枚举不合法的一列进行dp。考场上这题非常神仙啊,没怎么想出来。搜索可以拿到较高分数,好好练搜的重要性!!

T3 P7098 [yLOI2020] 凉凉 预处理巨多的状压题,除了状压两个字之外根本没想到,看题解看的很艰难,仍然要学习部分分。

T4就比较神仙了!P6623 [省选联考 2020 A 卷] 树,由于进位考虑反建Trie树,全场最恶心的一道题,直到现在代码实现里的一些细节自己写也不是很清楚。

收获是:模拟还是一样,静下心来慢慢写,一定要考虑清楚细节,不要大意,做到不重不漏,尽量以简洁的方式实现。学会打骗分,学会写搜,对于区分度较高的题,拿到较高分数的暴力非常有利。


5.3
省流:一道挂分了的水题,四道暴力。

T1 Stack of Presents ,一道想明白了就很简单的题,想不明白容易挂分(比如说我第一次写的),然而最后因为神秘原因挂了50,难绷。

T2 P5522 [yLOI2019] 棠梨煎雪 ,状压+线段树的神仙题,然而我考场上靠写暴力获得了较高分数(Day1 的反例了属于是),比较难想的数据结构题,主要难点大概在状压。

T3 打砖块 ,神仙dp题,借子弹的思想比较抽象,想不到。

T4 [NOIP2015 提高组] 斗地主 ,大模拟题,搜就可以,情况比较多,注意回溯。(然而我考场上除了骗分根本没写,试图想贪心发现假了就开始罚坐。)

粘一下代码吧
//大模拟啊哈哈哈大模拟 
#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int T,n,a[maxn],b[maxn],ans,sum[maxn];
//先从顺子开始搜 
void dfs(int x){
	//cout<<x<<" "<<ans<<endl;
	if(x>=ans)
		return;
	
	int k=0;
	for(int i=3;i<=14;i++){//单顺子 
		if(sum[i]==0)
			k=0;
		else{
			k++;
			if(k>=5){
				for(int j=i;j>=i-k+1;j--){
					sum[j]--; 
				}
				dfs(x+1);
				for(int j=i;j>=i-k+1;j--){
					sum[j]++;
				}
			}
		}
	}
	
	k=0;
	for(int i=3;i<=14;i++){//双顺子 
		if(sum[i]<=1){
			k=0;
		}
		else{
			k++;
			if(k>=3){
				for(int j=i;j>=i-k+1;j--){
					sum[j]-=2; 
				}
				dfs(x+1);
				for(int j=i;j>=i-k+1;j--){
					sum[j]+=2;
				}
			}
		}
	}
	k=0;
	for(int i=3;i<=14;i++){//三顺子 
		if(sum[i]<=2){
			k=0;
		}
		else{
			k++;
			if(k>=2){
				for(int j=i;j>=i-k+1;j--){
					sum[j]-=3; 
				}
				dfs(x+1);
				for(int j=i;j>=i-k+1;j--){
					sum[j]+=3;
				}
			}
		}
	}

	for(int i=2;i<=14;i++){//枚举3或4张的牌
		if(sum[i]<=3){//三张及以下 
			if(sum[i]<=2)
				continue;
			sum[i]-=3;
			for(int j=2;j<=15;j++){
				if(sum[j]<=0 || j==i)
					continue;
				else{//三带一 
					sum[j]--;
					dfs(x+1);
					sum[j]++;
				}
			}
			for(int j=2;j<=14;j++){
				if(sum[j]<=1 || j==i)
					continue;
				else{//三带二 
					sum[j]-=2;
					dfs(x+1);
					sum[j]+=2;
				}
			}
			sum[i]+=3;
		}
		else{
			//先用三带 
			sum[i]-=3;
			for(int j=2;j<=15;j++){
				if(sum[j]<=0 || j==i)
					continue;
				else{//三带一 
					sum[j]--;
					dfs(x+1);
					sum[j]++;
				}
			}
			for(int j=2;j<=14;j++){
				if(sum[j]<=1 || j==i)
					continue;
				else{//三带二 
					sum[j]-=2;
					dfs(x+1);
					sum[j]+=2;
				}
			}
			sum[i]+=3;
			//再用四带
			sum[i]-=4;
			for(int j=2;j<=15;j++){//四带两张 
				if(sum[j]<=0 || j==i)
					continue;
				sum[j]--;
				for(int k=2;k<=15;k++){
					if(sum[k]<=0 || j==k)
						continue;
					sum[k]--;
					dfs(x+1);
					sum[k]++;
				}
				sum[j]++;
			}
			for(int j=2;j<=14;j++){//四带两对 
				if(sum[j]<=1 || j==i)
					continue;
				sum[j]-=2;
				for(int k=2;k<=14;k++){
					if(sum[k]<=1 || j==k)
						continue;
					sum[k]-=2;
					dfs(x+1);
					sum[k]+=2;
				}
				sum[j]+=2;
			}
			sum[i]+=4; 
		} 
	}
	for(int i=2;i<=15;i++) if(sum[i]) x++;
	ans=min(ans,x);
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>T>>n;
	while(T--){
		ans=1e9;
		int x,y;
		memset(sum,0,sizeof sum);
		for(int i=1;i<=n;i++)
		{
			cin>>a[i]>>b[i];
			if (a[i]==0) sum[15]++;
			else if(a[i]==1) sum[14]++;
		    else sum[a[i]]++;
		}
		dfs(0);
		cout<<ans<<endl;
	}
}

收获是:从好想好写的题入手,不会就写暴力分,保证自己会的分都拿到,注意时间分配。


5.19
省流:四道概率和期望,努力了但还是罚坐。

T2题解

posted @ 2024-04-05 19:04  Aapwp  阅读(14)  评论(0编辑  收藏  举报