首页 > 其他分享 >暑假集训CSP提高模拟7

暑假集训CSP提高模拟7

时间:2024-07-25 21:51:58浏览次数:8  
标签:200001 int 查集 集训 SPJ 暑假 cases now CSP

这个 T1 的 \(n^{3}\) 的 SPJ 效率还是太慢了,膜拜 SPJ 大神学长,还会画画

A.Permutations & Primes

这题感觉挺水的但是感觉有不是那么水,主要还是因为我赛时没想出正解,在打的表里找了一组好看的规律,打上了然后就过了. 对偶数来说,我的规律正好是正解的特化,但是对奇数来说,我的规律就很奇怪了,我开头是 \(5\),最中间是 \(1\),结尾是 \(2\) 但是我完全卡不掉,如上图. 感觉是对的,不会证明其正确性.

学长写的 SPJ 挺神的,每次根据答案扩展,我的 \(n^{3}\) 写法比起来就太菜了

#include<bits/stdc++.h>
using namespace std;
int n,a[200001];
int main(){
	int cases;scanf("%d",&cases);while(cases--){
		scanf("%d",&n);
		if(n&1){
			a[(n+1)/2]=1;int tot=1;
			int i1=1,j1=(n+1)/2-1,i2=(n+1)/2+1,j2=n;
			while(i1<=j1 and i2<=j2){
				a[j2]=++tot;j2--;
				a[j1]=++tot;j1--;
				if(i1<=j1 and i2<=j2){
					a[i2]=++tot;i2++;
					a[i1]=++tot;i1++;
				}
			}
			for(int i=1;i<=n;++i){
				printf("%d ",a[i]);
			}
			cout<<endl;
		}
		else{
			int i1=1,j1=n/2,i2=n/2+1,j2=n;int tot=0;
			while(i1<=j1 and i2<=j2){
				a[i2]=++tot;i2++;
				a[i1]=++tot;i1++;
				if(i1<=j1 and i2<=j2){
					a[j2]=++tot;j2--;
					a[j1]=++tot;j1--;
				}
			}
			for(int i=1;i<=n;++i){
				printf("%d ",a[i]);
			}
			cout<<endl;
		}
	}
}

B.树上游戏

真有 \(50w\) 个吗,能不能送我一个

没想到答案居然有单调性,但是答案确实有单调性. 如果能选 \(k\) 种颜色就一定能选 \(\lt k\) 种颜色,因此可以用二分答案做.

现在问题就是 check() 怎么写,发现我们可以只考虑深度最大的节点往回搜,当搜到 \(mid\) 距离的时候就说明至少要在这里放一个点,否则就走不到了,因此我们据此来统计节点个数,然后跟 \(k\) 比较作为二分依据

#include<bits/stdc++.h>
using namespace std;
int n,k,ans;
int a[200001],b[200001];
int num,len;
vector<int>e[200001];
void dfs(int now,int last){
	int p=-1,q=0;
	for(int i:e[now]){
		if(i!=last){
			dfs(i,now);
			p=max(p,a[i]-1);
			q=max(q,b[i]+1);
		}
	}
	if(p>=q){
		a[now]=p;
		b[now]=-1;
		return;
	}
	if(q<len){
		a[now]=0;
		b[now]=q;
		return;
	}
	num++;
	a[now]=len;
	b[now]=-1;
}
bool check(int x){
	memset(a,-1,sizeof a);
	memset(b,-1,sizeof b);
	len=x,num=0;
	dfs(1,0);
	if(b[1]!=-1){
		num++;
	}
	if(num>k) return false;
	return true;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n-1;++i){
		int x,y;cin>>x>>y;
		e[x].push_back(y);
		e[y].push_back(x);
	}
	int l=1,r=200000;
	while(l<=r){
		int mid=(l+r)/2;
		if(check(mid)){
			r=mid-1;
			ans=mid;
		}
		else{
			l=mid+1;
		}
	}
	cout<<ans<<endl;
}

C.Ball Collector

考虑对冲突的部分连边(还是记一下吧,挺套路的,上一个用这个套路的题还是二分图最大独立集)

连完以为是道不可做,结果能手玩一下出性质,性质就是树只能选出 \(x-1\) 个种类不同的数,其余情况均能选出 \(x\) 个

我在考场上大抵是没这么大胆猜这种结论.

维护是不是树,那么可以通过维护一个并查集,然后看它的 \(size\) 来决定,但是还需要写撤销操作,所以要用可撤销并查集,可撤销并查集思路还是挺巧的,用了按秩合并来维护平衡

D.满穗

标签:200001,int,查集,集训,SPJ,暑假,cases,now,CSP
From: https://www.cnblogs.com/HaneDaCafe/p/18323863

相关文章

  • 「模拟赛」暑期集训CSP提高模拟6(7.23)
    \(140pts,Rank23\)题目列表A.花间叔祖B.合并rC.回收波特D.斗篷花间叔祖\(98pts\)题意:给定一个数组,选择一个大于等于2的模数,然后把数组中的数变成\(mod\)该模数后的数。只能操作一次,问操作后最少有几种不同的数。赛事分析:开始5分钟想到了算\(a_i\)中所有......
  • 2024暑假集训测试11
    前言比赛链接。这次好多外校的参加\(60\)多个人,反正至少没怎么挂分。确切的说赛时我只能冲T1、T2,T3可撤销或可持久化并查集都不会,赛后现学的,T4更抽象,可惜T2打假了。T3最后五分钟才开始看,没想直接打暴力了。但是T3数据太水了,加了捆绑还是水,赛后安排了重测。T1Pe......
  • 2024 暑假友谊赛-热身2
    TreeDestruction-洛谷|计算机科学教育新生态(luogu.com.cn)思路:树的直径。定理:在一棵树上,从任意节点y开始进行一次DFS,到达的距离其最远的节点z必为直径的一端。第一次dfs1(),从任意一个点,到达的最远的点必然是直径两端的其中一个。再从找到的端点开始dfs1(),......
  • 西安理工大学机器人NEXT-E战队 视觉组简介和24届新生暑假自学指引
    视觉组简介和24届新生暑假自学指引1.视觉组是什么RoboMaster机器人竞赛作为一个竞技机器人赛事,利用弹丸攻击对方机器人或对方场地道具装甲板是取得胜利的关键。为了更好的进行打击,仅依靠操作手的手动瞄准是远远不够的,因此。视觉组利用各类算法,开发出稳定的自动瞄准系统,能够极......
  • 暑假集训csp提高模拟7
    赛时rank42,T180,T213,T30,T420在T4挂死了,赛时胡了一个挺没有前途的\(O(n\log_2^3n)\)的做法,结果赛后发现假了,没有时间打T2,T3的暴力了。糖T1Permutations&PrimesPermutations&Primes赛时有一个特判\(n=3\)错了,挂了20pts结论非常显然,1放中间,2、3各放一边,剩下的随便......
  • ssy中学暑假集训学习笔记
    7.25集训第二天今天我们学了博弈论相关题目,但是在做相关题目前,我们先明确几个基本的知识点:mex运算:给定一个集合,该集合中不存在的最小自然数即为该序列的mex。举个例子:对于集合{\(0\),\(1\),\(1\),\(2\),\(4\)},他的mex即为\(3\)。SG函数:我们先建立一个DAG,从出度为\(0\)的节......
  • 暑假集训CSP提高模拟7
    暑假集训CSP提高模拟7组题人:@KafuuChinocpp|@Chen_jr\(T1\)P122.Permutations&Primes\(20pts\)原题:CF1844BPermutations&Primes假的构造策略,拿到了\(20pts\)。若\(n\)为奇数,则将\(1\)放在\(\left\lceil\frac{n}{2}\right\rceil\)的位置上,前一半......
  • 「模拟赛」暑期集训CSP提高模拟5(7.22)
    \(140pts,Rank24\)题目列表:简单的序列简单的字符串简单的困难的图论简单的序列\(100pts\)题意:gtm1514不喜欢序列。但是一天他拿到了一个序列。这个序列非常杂乱,于是gtm1514想要整理一下这个序列。但是由于他非常的菜,他只会进行一个操作:选择一个\(ai\),把它变......
  • CSP 2023 Round 2 游记
    Day?最近\(WHK\)下滑严重,月考排名掉到了\(50\)多了,想着等着这次\(CSP\)完就先退役,也就没想着拿奖去复习。Day0考前周五没怎么搞\(OI\),学校作业多到爆炸,晚自习老师一直讲课,都要睡着了,完事和WSL一起散散步就出校门了,结果WSL却跑回去跑800,说是为了运动会(,卷神。Day1-......
  • CSP 模拟 4
    T1WhiteandBlack原题ARC148CLightsOutonTree最小和无解都不用管,不能下改上,所以从上往下,遇到就反转。一定的观察后发现,当这个点的颜色与父亲不同时,会有贡献,然后直接就做完了。点击查看代码#include<bits/stdc++.h>typedeflonglongll;typedefunsignedlonglong......