![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
构造
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[贪心 构造] SRM 717 div1 ScoresSequence
首先他保证图唯一确定,那么可以把图给构出来 类似这个题,按照出度从大到小排序,出度最大那个点怎么分配,类似无向图可图判定,应该是向出度小的点连,使得出度大的向他连,让出度大的出度减小// BEGIN CUT HERE #include<conio.h>#include<sstream>// END CUT HERE #include<cstdio>#include<cstdlib>原创 2017-07-05 19:11:09 · 373 阅读 · 0 评论 -
[Notes] 构造题小结
构造题很繁杂啊 有构造方案的 有转化为图论模型比如欧拉回路的 最近做到很多构造解使得某个属性恰好为K的一类题大概有几种套路*2+1套路 TCO16 Semi 1 MinimumCutsAgain [K个最小割] SRM 689 div1 MultiplicationTable3待定参数 HDU 5334 Virtual Participation [K个不同子串]进制拆分 SRM原创 2017-04-07 21:02:07 · 351 阅读 · 0 评论 -
[构造 随机 生成树计数] UOJ #75 【UR #6】智商锁
题解大概意思是拆成4个12 瞎随机个千把个 找出四个使得abcd=K 这个meet in middle 就好了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;const int P=998244353;const int N=15;inline ll原创 2017-04-07 20:44:23 · 382 阅读 · 0 评论 -
[构造 哈密顿路径] SRM 704 div1 HamiltonianConstruction
构造一个图使得1到n的哈密尔顿路径恰好为k。 k<=100000, 要求点数不超过20。广为流传的做法是 1<-2<-…<-18一条路径,然后1-18都向编号比它大的节点连边。这样的话往回走就只有唯一的路径,所以假如说我当前在i,走到了j,j>i,那么就需要立刻从j到j-1直到i+1,然后再往后走。这样就相当于每个节点有选或不选两种状态,如果选的话就是从前面第一个比它小的选的节点跳过来,原创 2017-04-07 20:40:45 · 488 阅读 · 0 评论 -
[构造] Codeforces 226D #140 (Div. 1) D. The table
有一个n*m的矩阵,每次可以将一列取负或者将一行取负,求一个方案使得每行每列的和都非负。 n,m<=100,元素绝对值<=100如果有某一行或某一列为负 直接取反 这样整个矩阵的和肯定会变大 也就是说一定结束 每次操作至少使和增加22,而和最大1003100^3,最小−1003-100^3,所以总步数最多为1003100^3。#include<cstdio>#include<cstdl原创 2017-04-07 20:32:40 · 304 阅读 · 0 评论 -
[构造] HDU 5332 Test for Rikka
构造一个有向简单图,使得从1号点走m步到n号点的方案数恰好为K。 K<=1e18, n,m<=30取 C=9 D=20#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef原创 2017-04-07 20:29:30 · 683 阅读 · 0 评论 -
[构造] HDU 5334 Virtual Participation
构造一个字符集大小没有限制的字符串,使得不同的子串个数恰好为K。 K<=1e9,要求串长不超过1e5假设数列是a个1+b个2+c个1,a>=c 不同的子序列总数 ab+bc+ac+a+b=k (a+c+1)(b+c+1)=k+(c+1)(c+1) 枚举 c+1 即可#include<cstdio>#include<cstdlib>#include<algorithm>#inclu原创 2017-04-07 20:27:31 · 260 阅读 · 0 评论 -
[构造] CODE FESTIVAL 2016 Grand Final G. FESTIVAL
传送门 构造一个字符串,使得恰好有K个子序列为FESTIVAL。 K<=10^18, 要求字符串的长度不超过6000。 记序列为FFFFFFESTIVALFFFESTIVAL… 连续c1个F后面接ESTIVAL,连续c2个F后面接ESTIVAL,这样放t个。 记f(n)表示n个ESTIVAL中ESTIVAL的子序列个数,f(n)=C(n+6,7)。 所以答案为c原创 2017-04-07 20:22:06 · 669 阅读 · 0 评论 -
[构造 二分图] SRM 693 div1 BipartiteConstruction
构造二分图,使得完备匹配个数恰好为K。 K<=10^9,可以有重边,要求两部分点数不超过20,边数不超过120。传送门一开始匹配数是0 每加一条红边 可以使答案增加3i3^i// BEGIN CUT HERE #include<conio.h>#include<sstream>// END CUT HERE #include<cstdio>#include<cstdlib>#原创 2017-04-07 20:19:37 · 317 阅读 · 0 评论 -
[构造] ICPC 2016 Hong Kong A. Colourful Graph
传送门给你一个nn个点的无向连通图,每个点被染了kk个颜色中的一种。 你可以对其进行一些修改,假设i时刻的颜色为cv,ic_{v,i},那么i+1i+1时刻的颜色cv,i+1c_{v,i+1}可以为cv,ic_{v,i}或者cu,ic_{u,i},其中 uu , vv 之间有边相连。 给你初态和终止状态,问你有没有方法在2000020000步内从初态变成终态。 n≤100n\leq100这个步原创 2017-03-30 08:13:08 · 487 阅读 · 0 评论 -
[构造] ICPC 2016 Hong Kong I. Special Tour
有一个n∗mn*m的网格图,构造一条哈密尔顿回路使得相邻的两个点的距离为22或者33,如果无解输出无解。 n,m≤200n,m\leq200我是dls的脑残粉 #include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;int n,m;int flag;inline void print(int x原创 2017-03-30 08:23:03 · 558 阅读 · 0 评论 -
[构造] Codeforces Gym 100553 NEERC 14 E. Epic Win!
一道神奇的题 题目大意给你一个剪刀石头布自动机 然后让你构造一个剪刀石头布自动机克制他 这个我们先构造出一个完全针对他的自动机WW 无用的边我们先当他undefined 然后我们开始枚举起点一起跑 用双方所在节点(x,y)(x,y)表示状态 当前状态的转移遍不存在时 我们就把这条边连向WW的一个副本的对应节点 如果成环了 那么一定是在一个WW的副本里成环 这个环是一直赢的 因为只有WW副本之原创 2017-05-23 21:16:14 · 916 阅读 · 0 评论 -
[构造] Codeforces 804E Round #411 (Div. 1) E. The same permutation
打表发现4是可以做到不变的 然后我们四个划为一块 两块之间16下也是可以不变的 具体 const int xx[]={ 1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4 }; const int yy[]={ 1,2,3,4,2,1,4,3,3,4,1,2,4,3,2,1 };这样相当于第一个四下 相当于会把两边对调 然后每个数x原创 2017-05-23 21:24:23 · 453 阅读 · 0 评论 -
[构造] Codeforces Gym 101190 NEERC 16 C. Cactus Construction
我们递归地搞 使得包含点P的某个仙人掌被构造出来且除了P是1其他都是2 然后就是拆桥边或拆环 递归下去 然后在合起来就行了 把桥边接起来很显然 环的话 自己画画也不难搞出来了吧#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#include<set>#define pb push_backusin原创 2017-04-15 20:30:27 · 742 阅读 · 0 评论 -
[构造 随机乱搞] Codeforces Gym 100608 ASC 47 E. Elegant Square
这个题根本没思路 没想到就是乱搞 我们让每个点由三个质数组成 分别为ai,j∗bi,j∗ci,ja_{i,j}*b_{i,j}*c_{i,j} 然后我们取出前n个质数 放在A第一行 接下来每行由上一行位移一下 B和C同理 这样肯定保证了行列乘积一样 但是会有数字重复 遇到重复 xjb交换个几行 就好了 直到没有重复#include<cstdio>#include<cstdlib>#in原创 2017-04-18 21:30:10 · 646 阅读 · 0 评论 -
[2-SAT 构造] Codeforces Gym 101173 CERC 16 L. Lost Logic
题目大意 给nn个01变量的三种取值 构造形如 (!)a->(!)b 的限制 使得有且仅有这三个满足 首先我们可以把三个值一样的变量去掉 只要一个限制就够了 然后剩下6类 类内部的变量一定两两相同 那么加一下限制 完全互补的两类可以合并 只要分别取出代表 限制两个一定相反就好了 这样我们最多剩下三类一类 显然不需要限制两类 去两个代表 这两个变量的值组成的二元组只有三种值是有效的 实际上原创 2017-03-31 20:07:10 · 652 阅读 · 0 评论 -
[构造 随机] Codeforces 720C Russian Code Cup 2016 - Finals C. Homework
我是dls的脑残粉 #include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#define pb push_backusing namespace std;const int N=100005;int n,m,K;int w[N];inline int count(){ int ret=0; f原创 2017-04-09 20:35:45 · 455 阅读 · 0 评论 -
[构造] Codeforces Gym 101173 CERC 16 D & BZOJ 4790 Dancing Disks
FB! 懒 直接搬题解吧 先令fn,mf_{n,m}表示n∗mn*m的网格能排序的最大数量 我们把左上角这一格里的数 按大小分到其他块中 其中(i,j)(i,j)最多放fn−i+1,m−j+1f_{n-i+1,m-j+1}个 然后递归的做就好了 我们发现某根柱子就算本来有东西也毫不影响 踩上去就是了 这样是fn,m=∑i=1n∑j=1mfi,j i≠n or j≠mf1,1=1原创 2017-03-30 21:01:37 · 572 阅读 · 0 评论 -
[构造] Codeforces Gym 101173 CERC 16 K & BZOJ 4796 Key Knocking
每三个一起考虑 不论如何 我们都可以进行最多一次操作使得答案加2 就好了#include<cstdio>#include<cstdlib>#include<algorithm>#include<string>#include<cstring>using namespace std;const int N=1000005;char s[N]; int n;const int op[]={原创 2017-03-30 21:11:57 · 868 阅读 · 0 评论 -
[构造] Codeforces 618F Wunder Fund Round 2016 F. Double Knapsack
给定两个大小为n的可重集A, B ,两个数集中的元素均为[1, n]的整数。 现在要求在两个数集中各找出一个非空子集(子集也为可重集) ,满足两个集合中元素的和相等。 n<=10^6 加限制使得选的为两个连续的段。 不妨设SA<=SB,记SA的前缀和为SA(0),SA(1),SA(2),…, SB的前缀和为SB(0),SB(1),SB(2),… 对于每个SA(i),原创 2017-04-07 20:16:23 · 409 阅读 · 0 评论 -
[构造] Codeforces 468C #268 (Div. 1) C. Hack it!
记f(x)为x的数位和。 求l,r使得sum (i=l..r) f(i) mod P=0 P<=10^18, 要求l,r<=10^200 由于有两个参数l,r,自由度太大,所以我们加一个限制使得r=l+10^19-1。 这个时候我们注意到将[l,r]变成[l+1,r+1],整体上加上了f(r+1)减去了f(l)。 而r+1和l只差一位,也就是f(r+1)-f(l)=原创 2017-04-07 20:14:39 · 355 阅读 · 0 评论 -
[构造] SRM 689 div1 MultiplicationTable3
构造一个n∗nn*n的数组gi,jg_{i,j}。 一个集合SS是好的当且仅当对于集合中的任意两个数 xx , yy , gx,yg_{x,y}也在SS中。 请构造一个数组使得好的集合个数恰好为KK,n≤20n\leq20。考虑经典套路 构造x+1x+1和2x2x对于2x2x ,新加元素pp ,使得gp,i=gi,p=ig_{p,i}=g_{i,p}=i ,那么pp可选可不选 对原创 2017-04-07 20:11:34 · 204 阅读 · 0 评论 -
[构造 找规律 孔明棋] Ural 1051 Simple Game on a Grid
论文:俞鑫--棋盘中的棋盘——浅谈棋盘的分割思想证明篇幅太长就不弄过来了#includeint main(){ int n,m,ans; freopen("t.in","r",stdin); freopen("t.out","w",stdout); scanf("%d%d",&n,&m); if (n==1) ans=m-m/2; els原创 2016-12-08 20:30:04 · 1297 阅读 · 2 评论 -
[构造] Canada Cup 2016 C. Hidden Word
链接:http://codeforces.com/contest/725/problem/CEach English letter occurs at least once in s.!!没看见!! 然后写爆搜剪枝写到爆炸#include#include#includeusing namespace std;inline char nc(){ stat原创 2016-10-31 17:57:35 · 254 阅读 · 0 评论 -
[并查集 构造] Codeforces 723F#375 (Div. 2) F. st-Spanning Tree
并查集乱搞的构造竟然因为return printf的返回值 无限RE#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,10000,st原创 2016-10-09 08:19:43 · 471 阅读 · 0 评论 -
[随机化 构造] Codeforces 717H Bubble Cup 9 - Finals H. Pokermon League challenge
随机化...不明觉厉#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return原创 2016-09-14 19:33:16 · 620 阅读 · 0 评论 -
[构造] Codeforces 717E Bubble Cup 9 - Finals E. Paint it really, really dark gray
这是一道递归构造的题先构造完子树,然后可以通过走father来调整自己因为1没有father 需要特判 走一个儿子来调整#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2){ p2=(p原创 2016-09-14 19:35:19 · 467 阅读 · 0 评论 -
[构造] UNR #1 Jakarta Skyscrapers
Jakarta Skyscrapers被绍一的神犇们教导了可以发现c肯定是Gcd的倍数那么可以先用倍增模拟取模算出gcd然后用gcd倍增出c考试时没特判c>a && c>b 爆炸 20分#include#include#include#includeusing namespace std;typedef long long ll;typedef原创 2016-07-20 09:21:47 · 416 阅读 · 0 评论 -
[构造] BZOJ 2530 [Poi2011]Party
考虑删点 每次找一对没有连边的点对将其删掉 至少删掉了1个不在团中的点 那么不超过1/3次操作后所有不在团中的点都会被删掉 此时最多删掉了2/3个#include#include#includeusing namespace std;const int N=3005;int n,m,cnt=0;int a[N][N],vst[N];int main原创 2016-05-20 16:39:43 · 401 阅读 · 0 评论 -
[二进制构造 || DP] BZOJ 3107 [cqoi2013]二进制a+b
可以类似数位DP然后Po姐 的构造好劲啊 Orzhttp://blog.csdn.net/popoqqq/article/details/48006557#include#include#includeusing namespace std;inline int lowbit(int x){ return x&-x;}inline int digit(in原创 2016-05-20 16:36:48 · 414 阅读 · 0 评论 -
[构造] BZOJ 1530 [POI2005]Sko-knight Knights
论文:陈启峰--一张一弛,解题之道觉得论文里的图有点问题 不过思路很棒注意到,如果任意的三个向量都可以与某两个向量等价,那么便可以从n(n>2)个向量中任选三个向量出来,用与它们等价的两个向量代替它们,从而变成n-1个向量。不断重复上述的过程,直到只剩下两个向量为止,这时剩下的两个向量便是一个可行解。而由问题描述可以知道:对于任意三个向量都存在两个向量与它们等价。这便意味这种方原创 2016-12-09 20:32:34 · 643 阅读 · 0 评论 -
[贪心 构造] BZOJ 2943 [Poi2000]三臂起重机 Triple-Arm Crane
在BZOJ上蜜汁RE但是main上过了if p > q then swap(p,q)for I := 1 to n do if i没有放 then if i + p没有放 then 放(i,i+p,i+p+q) else 放(i,i+q,i+p+q)为什么这么做可行呢 可以证明对于每个循原创 2016-12-18 13:12:11 · 404 阅读 · 2 评论 -
[最小割 构造] TCO16 Semi 1 MinimumCutsAgain
dls说这是道无聊的题 构造一个有向带权图,使得恰有K个0-1最小割。 0-1最小割是将图分成S和T两个集合,0属于S, 1属于T,权值为从S到T的边的边权和。 K<=1000,要求点数<=20 假设有个x的方案,构造2x和x+1。 构造2x十分简单,只要加一个空的点即可。 构造x+1的方案,只要加一个点p,然后向2到p-1全都连上边即可。 这样0-1的最原创 2017-04-07 07:03:02 · 506 阅读 · 0 评论 -
[构造 八数码] Codeforces 472E #270 E. Design Tutorial: Learn from a Game
n=1n=1或m=1m=1的时候特判 不然就是有解的 需要前置技能手玩八数码 然后就可以不断把nn和mm缩小 直到n=2,m=2n=2,m=2 这时候 因为可以斜着走 就可能有解 写起来一点不愉悦#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#define pb push_backusing原创 2017-04-07 06:59:27 · 572 阅读 · 0 评论 -
[可图性判定 Havel-Hakimi定理 构造] Codeforces Gym 100269 NEERC 13 Northern K. Kids in a Friendly Class
黑点和白点的个数可以从小到大枚举 黑白点之间的连边是显然的 那么对于白点或黑点内部 我们就需要连边使得每个点度数相同每次选两个剩余度最大的点相连是错误的 反例 6 2那么应该怎么连 需要Havel-Hakimi定理 由非负数组成的非增序列s:d1,d2,⋯,dn(n≥2,d1≥1)s:d_1,d_2,\cdots,d_n(n\geq2,d1\geq1)是可图的,当仅当序列s1:d2−1,d3原创 2017-04-07 06:55:05 · 1026 阅读 · 0 评论 -
[构造] Codeforces 736E #382 (Div. 1) E. Chess Championship
有m个人参加比赛,每两个人都恰好比了一场 两个人比赛如果一方赢了,那么得到2分,平局得到1分,输了得到0分。 告诉你排行榜前n个人的得分,构造比赛满足条件 n<=m<=3000 充要条件就是分数按从小到大排,前i小的分数总和不小于i(i-1),m个人的分数总和为m(m-1) 构造的时候是选择分数最高的人,让他在分数高的人比赛中失败,低的人比赛中获胜 我们只原创 2017-04-07 06:46:20 · 705 阅读 · 0 评论 -
[构造] BZOJ 2717 [Violet 4]迷路的兔子
玄妙的构造 总共有C2nC_n^2对兔子 每次值班会对3对产生影响 那么答案的上界就是C2nC_n^2 确实存在达到上界的构造方法#include<cstdio>int n;int main(){ freopen("t.in","r",stdin); freopen("t.out","w",stdout); scanf("%d",&n); printf("%d\n",n*(n-1原创 2017-03-10 15:58:19 · 721 阅读 · 0 评论 -
[构造 数学推导] HDU 5847 Different Sums
一道可怕的构造题 题解及推导#include<cstdio>#include<cstdlib>#include<algorithm>const int maxn=10000;const int N=2005;int vst[maxn+5]={1,1,0}; int s[N];int main(){ int Q,n; freopen("t.in","r",stdin); fre原创 2017-03-17 21:02:34 · 460 阅读 · 0 评论 -
[构造 || 斐波那契分解] BZOJ 2912 [Poi1997]Jump
论文:何林--信息学中的守恒法构造就不摘了 摘录fib分解的做法#include#include#include#include#includeusing namespace std;typedef long long ll;const int con=100000000;class Int{public:long long a[1000];原创 2016-12-09 13:18:19 · 808 阅读 · 0 评论 -
[欧拉回路 构造 || 网络流] Codeforces 723E #375 (Div. 2) E. One-Way Reform
通过欧拉回路构造 称度为偶数的点为偶点 度为奇数为奇点偶点可以满足条件 而奇点不能肯定可以通过只加奇点之间的边使得存在欧拉回路然后求欧拉回路 把加的边删去 对偶点无影响那么就能使所有偶点满足条件网络流?我不是很会网络流的做法#include#include#include#include#define cl(x) memset(x,0,sizeo原创 2016-10-05 21:14:06 · 634 阅读 · 0 评论