构造
goto_1600
我何来寂寞,哪有寂寞可言。
展开
-
CF1305E Kuroni and the Score Distribution(构造)
Link 题意: 思路: 先构造1,n直到溢出了位置,然后考虑加n,如果单纯加n,那么对于前面贡献是n2\frac{n}{2}2n,然后发现n每隔2个数对前面的贡献都会减1,感性的理解,就是,之前n和一个值能匹配x,现在x变大了,n怎么匹配也匹配不了了,那么暴力加n知道刚好能满足m就行了,然后最妙的就是如何处理剩下的数,要造成0贡献,不如隔开构造,也就是说当前的最大值是max,前面有n个数,我们可以构造1e9-n*(maxv+1),1e9-(n-1)*(maxv+1)… 代码: //#pragma GC原创 2021-10-01 16:48:45 · 223 阅读 · 0 评论 -
E. Road to 1600(构造,打表)
题意: 构造方格1~n*n,皇后和车的走法如图,皇后和车会走当前能走的位置中没走过的值最小的来走,如果没有花费就会加1并且跳到整个图中没走过中的最小的方格来走,让你构造一个矩阵,使得车的花费比皇后少。 思路: n<=2显然是无解的,n=3可以通过打表打出来,然后想想怎么拓展,我们可以通过走蛇形矩阵的方法,先蛇形递增的摆放食物诱导皇后和车同轨迹走,最后让车和皇后走到n,1或者1,n,(取决于n的奇偶性),然后皇后会跳进子问题n=3的陷阱,那么皇后就输了。 代码: // Problem: E. Road.原创 2021-09-02 17:38:01 · 221 阅读 · 2 评论 -
D. Diane
题意: 让你构造一个长度为n的字符串,使得每一个子串都出现奇数次。 思路: 死活构造不出来,只知道每一个字母只能出现奇数次,有一个奇妙的性质没有挖掘到,就是相邻长度l和l+1的连续的字母两个一块构造的话就能出现奇数次,那么讨论讨论就行了,把两个字符串分开用别的字母就可以。注意1的特判。 // Problem: C. Mikasa // Contest: Codeforces - Codeforces Round #735 (Div. 2) // URL: https://codeforces.com/con原创 2021-07-30 11:46:39 · 228 阅读 · 0 评论 -
牛客IOI周赛26-普及组 最短路
link:https://ac.nowcoder.com/acm/problem/219918 思路: 建立虚拟原点 31个点,如果a[i]>>k&1 就和k连一条边权为a[i]的无向边,比赛时候没想到这种建图=-=。 // Problem: 最短路 // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/11233/D // Memory Limit: 524288 MB // Time Limit: 2000原创 2021-06-04 22:47:40 · 351 阅读 · 0 评论 -
CF1217D Coloring Edges 构造
题意: 选择最少的k种颜色给有向图中染色,让图中不存在只有一个颜色的环。 思路: 如果没有环那么就1个颜色,否则两个颜色,构造如下: 有向边 a,b a>b染成1 否则染成2。因为环中的边不可能存在单调递增的情况,总会有下降的情况。 #include<bits/stdc++.h> using namespace std; //#define int long long typedef long long ll; const int INF = 1e9; const int N=5010,原创 2021-05-06 11:55:07 · 176 阅读 · 0 评论 -
D. Enchanted Artifact
link 题意: 本题为交互题。有一个字符串s,只由字符’a’和’b’组成。每次你可以询问一个字符串,它会返回这两个字符串的编辑距离。为一个字符串经过修改,删除或插入操作得到另一个字符串,两个字符串编辑距离的定义为最小的操作次数,若返回值为0,那么就是字符串s。让你在n + 2操作内得出字符串s(n为字符串s的长度,未知)。 思路: 先问一个a ,问出他的长度,特判一下全b的情况,然后如果问出来是300的话也是全b,坑点=-=,不能询问超过三百的字符串,然后依次枚举位数,看答案的变化,直到问到编辑距离为0为原创 2021-04-15 20:49:22 · 172 阅读 · 0 评论 -
D - Irreducible Anagrams 字符串构造
题意:两个字符串之间如果是同构的,给定一个s,如果他存在一个同构串使得,他俩不能分割成大于1的同构串的话输出"Yes",否则输出"No" 思路: 由于分割成k个,我们可以把k个合并成两个,然后考虑特殊情况,如果长度为1那么可以,如果首尾单词不同,我们交换这两个也是可以的,例如abbb,交换得到bbba,这样只能分割自己本身,还有一种情况就是,不同单词有三个以上,例如A…B…C…A ,我们可以构造成C…A…A…B,那么也只能分割成1个了。 #include<bits/stdc++.h> using原创 2021-04-14 16:38:43 · 120 阅读 · 0 评论 -
G - Subset with Zero Sum
link 题意:要求在数组中选一些数,使得他们的和为0,i从1到n ,i-n<=a[i]<=i-1; 思路: 我们把等式变形一下,可以发现i-a[i]>=1 && i-a[i]<=n,然后我们按照这个建图,从i指向i-a[i],每个点都会有出度,这不是基环树嘛,那么图中的环可以发现把环上这些点加起来就是0。 复杂度O(n) 代码: #include<bits/stdc++.h> using namespace std; const int N=100001原创 2021-04-14 11:52:57 · 154 阅读 · 0 评论 -
E - Divide Points
link 题意:让你将点的集合划分成两个,然后两集合之间的距离没有在集合内部出现。 思路: 一开始以为是二分图啥的,结果是思维,考虑把点划分成4类,00,01,10,11, 0代表奇点,1代表偶点,然后如果存在两个不同类的点就可以划分,把00,11放在一起,01,10放在一起,如果符合的话,如果只存在一个集合的点,那么我们就把所有点就/2,改变其奇偶性,直到出现解位置。 复杂度n*log2e6 (写个jvavhhh)代码: import java.math.*; import java.util.*;原创 2021-04-14 11:49:55 · 148 阅读 · 0 评论 -
Vasya And Array
题目含义:给定一个长度为n的数列,给你m次操作 ,输入t,l,r ,如果t等于1的话说明l到r之间是不降序区间,t=0则相反,然后问你这所有询问是否有矛盾,如果无矛盾输入一组解。 思路:定义一个差分序列,原数组flag[i]代表i与i+1是否呈不降序,那么可以发现t等于1的时候每次操作就等价于将a[l]++和a[r]–,然后我们把所有前缀和累加起来,如果flag大于0则a[i]=true,将所有t=0的询问放到容器里面处理,判断是否矛盾等价于s[y-1]-s[x-1]==y-x,s数组表示的是前缀和,如果区原创 2020-09-01 17:34:25 · 256 阅读 · 0 评论 -
构造AR
好久没写题解了,于是我不要脸的又回来了,这题算是水题,但是我并没有看出来,????,如果给定的n 存在a和b 使得a+b==n && a*b == n 那么答案可以由a个A和b个R组成,那么一般的情况呢,可能会存在余数为k的情况,什么是余数为k的情况呢,就是在第一个放A后面几位放k个R接着再正常的放A然后放B,我们可以枚举放k然后质因数分解的方法看看是不是存在这样一个构造方案。 #include<iostream> #include<cstring> using na原创 2020-07-17 18:10:00 · 230 阅读 · 0 评论