构造题目合集

1.

链接

题意:\dpi{150} n个点划分为\dpi{150} c个集合,构造双向边,使得每个点的度数是d。同时保证集合之间不存在连边。输出划分方案。

数据范围:1 \leqslant c \leqslant n \leqslant 100000 ,0\leqslant d < n , n \times d \leqslant 200000

题解:

  • 首先根据直觉把d=0,d=1的情况判了。
  • c * (d + 1) > n无解,因为点数不够度数用。
  • n \% 2 == 1 \&\& d \% 2 == 1无解,因为度数是奇数,不符合双向边性质。
  • 其余情况都有解。当前情况是c=1,n\geqslant d。考虑想象\dpi{150} n个点在一个环上,但是不连边,只是按照顺序放在一个环上。每个点在环上向当前位置的前\lfloor \frac{d}{2} \rfloor个点和后\lfloor \frac{d}{2} \rfloor个点都连边。如果d是奇数,那么当前情况下n是偶数,每个点和环上相对位置的点连边。

2.

链接

题意:有n个牛排,m个锅。第i个牛排需要的制作时间是t_i。每个牛排同时至多在一个锅中制作。一个锅同时至多制作一个牛排。每个牛排在多个锅中的制作时间相同。一个牛排可以在一个锅内制作好,也可以先在一个锅中制作一段时间,然后换到另一个锅中制作,只需满足总制作时间是t_i即可。最小化所有牛排的制作时间。输出构造方案。

数据范围:1\leqslant n,m \leqslant 10^5,1\leqslant t_i \leqslant 10^9

题解:

  • 很容易想到二分答案然后打出GG。
  • 观察到答案至少是最大的t_i。可以保证每个牛排至多在两个锅内制作。
  • 再观察到答案不会超过\lceil {\frac{\Sigma t_i}{m}} \rceil
  • 然后按照锅的顺序摆放牛排即可。

3.

链接

题意:数轴上有n个点,特殊情况是n,1这两个点是相邻的,可以认为是环形数轴。同时有m个区间。特殊情况是对于区间[l,r],如果r>l,那么可以认为该区间覆盖了[r,r+1,\dots,n,1,2,\dots,l-1,l]。保证这m个区间两两之间没有交集。对这些区间求一个并集,得到点集S。构造一个区间集合T使得这些区间的交集是S

数据范围:1\leqslant m\leqslant n \leqslant 10^6

题解:

  • 考虑S有多个未被覆盖的区间。称这些区间为空白区间。
  • 设第i个空白区间是[x,y](x\leqslant y)T的第i个答案区间是[y+1,x-1]。即构造的每个答案区间都留出一个空白区间。

4.

链接

题意:2^n个点,编号是[0,2^n-1]i,j之间右边当且仅当i\oplus j的二进制表示只有一个1。每个点涂黑色或者白色。对于每个点i,要求与自己相邻且颜色相同的点的个数不超过\lceil \sqrt{n} \rceil

数据范围:1\leqslant n \leqslant 22

题解:如果i的二进制表示有奇数个1,则涂成黑色,否则涂成白色。

5.

链接

题意:[1,n*k]每个数被染了一种颜色c,其中c \in [1,n]。每种颜色有且仅有k个数字染了该颜色。挑选n个区间满足下列要求。

  • i个区间[a,b],其中a,b染的颜色都是ia<b
  • [1,n*k]内每个数至多被\lceil \frac{n}{k-1} \rceil个区间覆盖。

数据范围:1\leqslant n \leqslant 100 , 2\leqslant k \leqslant 100

题解:第i种颜色的第j次出现的位置记作x_{i,j}。将每种颜色拆出k-1个区间,即[x_{i,j},x_{i,j+1}],j\leqslant k。将n*(k-1)个区间按照右端点排序。然后从左往右取,不和要求冲突的区间可被选择。

证明:按照上面的策略,只会出现某种颜色的区间不被选择的情况,不会出现冲突的情况,因为是按照不冲突的策略贪心选的,所以只要证明可以选够n种颜色的区间即可。考虑反证法。如果一个颜色的k-1个区间都不能被选择,那么[x_{i,j}+1,x_{i,j+1}-1]内都存在\lceil \frac{n}{k-1} \rceil个区间右端点,但是(k-1)*\lceil \frac{n}{k-1} \rceil \geqslant n,但是至多存在n-1个不是该颜色的其他颜色“阻止”选择该颜色。因此与假设矛盾。

6.

链接

题意:两个森林,节点数均为n,边数分别为m_1,m_2。两个森林同时添加(u,v)使得两个森林还均是森林。问最多能添加多少条边。

数据范围:1\leqslant n \leqslant 10^5,0\leqslant m1,m2<n

题解:

  • 考虑每个点和1的连通情况。
  • 如果i在两个森林中都不与1连通,考虑直接连(1,i)
  • 如果i在两个森林中都与1连通,直接不考虑这个点。
  • 如果 i在第1个森林和1连通但是在第2个森林中不和1连通,直接存入第一个森林对应的栈,否则存入第二个森林对应的栈。
  • 对于两个栈中的栈顶元素u,v,如果在各自森林中均不与1连通,则直接连(u,v)
  • 容易发现最后至少有一片森林变成一棵树,连边数达到了最大值min(n-1-m_1,n-1-m_2)
  • 总结一下,这道题突破口就是和1的连通情况。
  • 但是构造出来我才知道是对的,那么既然已经构造出来了,我为什么还要知道他是对的呢?构造题真是奇怪。 

7.

链接

题意:长度为n的排列an是奇数。每次操作可以reverse一个奇数长度的前缀。不超过\frac{5n}{2}次操作实现sort(a+1,a+n+1)

数据范围:3\leqslant n \leqslant 2021

题解:

  • 如果没有奇数这个限制随便做,先把i移动到序列首部,再移动到应该的位置即可。
  • 因为偶数不能独自操作,考虑绑定2*k,2*k+1让他们同时复位。举一个例子。
  • 1\;2\;3\;6\;4\;5\;7
  • 7\;5\;4\;6\;3\;2\;1
  • 4\;5\;7\;6\;3\;2\;1
  • 3\;6\;7\;5\;4\;2\;1
  • 7\;6\;3\;5\;4\;2\;1
  • 1\;2\;4\;5\;3\;6\;7
  • 这样在\frac{5*(n-1)}{2}次操作下就完成了sort

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值