正睿集训模拟赛 Day1

本文详细介绍了正睿集训模拟赛第一天的三道题目:小K与集合、小K与数据、小K与奇数。涉及集合的划分方案、数据的并查集解法以及奇数图的欧拉回路问题,通过实例分析和算法讲解,阐述了解题思路和复杂度分析。
摘要由CSDN通过智能技术生成

又是被血虐的一天,
莫名的感觉到了自己的渺小~~



为了保护版权,题面只给出网站链接,敬请谅解。

小K与集合

题面链接
【解析】
由于子集的选择是随机的,因此若要存在划分方案,我们就必须保证无论选哪个子集最后都能得到 0 0 0

假如当前我们木有得到 0 0 0 ,集合的大小却小于 k k k 了,那么就不存在合法方案,因为接下来的划分必定会有空集,而一旦有了空集,我们就永远也不可能得到 0 0 0 ,所以输出 0 0 0

我们可以考虑数据中给出的特殊情况:初始集合所有元素均相等。

  • 假如所有元素都是 1 1 1 ,则至少要有 k k k 1 1 1 ,才会有合法方案。
  • 假如所有元素都是 2 2 2 ,我们先考虑有 k k k 1 1 1 ,再由这些区间得到 0 0 0 。那么要得到这 k k k 1 1 1 ,就至少要有 k k k 2 2 2 才能得到一个 1 1 1 ,所以至少要有 k 2 k^2 k2 2 2 2 ,才会有合法方案。
  • 同理可得,如果全是 3 3 3 ,那么至少要有 k k k 3 3 3 才能得到一个 2 2 2 ,所以至少要有 k 3 k^3 k3 3 3 3 ,才会有合法方案。

综上,我们可以总结出这样一个结论: k   个   i   ⇔   ( i − 1 ) k\ 个\ i\ \Leftrightarrow\ (i-1) k  i  (i1) 。(很像进制对吧?)

所以我们 n n n 0 0 0 推一遍,相当于做一次 k k k 进制的进位,如果进到最高位 0 0 0 时最高位上有数字,说明存在合法方案,否则就不存在,输出 0 0 0 即可。

接下来我们进行集合的划分。如果要存在合法方案,那么初始集合里至少要有 1   个   1   ,   k   个   2   ,   k 2   个   3 … 1\ 个\ 1\ ,\ k\ 个\ 2\ ,\ k^2\ 个\ 3… 1  1 , k  2 , k2  3 ,然后它们会全部减 1 1 1

最后只要顺着推过去即可。
时间复杂度: Θ ( n ) \Theta(n) Θ(n)
有个更详细的讲解:(盗个图)
在这里插入图片描述
【参考代码】

#include<bits/stdc++.h>
#define ll long long
#define ud using namespace std
ud;
const int maxn=1e5+1000;
int T,n,k,a,b[maxn],c[maxn];
ll cnt=1,sum=1,tot=1;
vector<int> id[maxn],ans[maxn];
inline long long read()
{
   
	long long sum=0,flag=1;
	char c;
	for(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值