随笔分类 - ACM / 构造
摘要:原题链接 考察:构造 思路: 很容易想到先构造$gcd(a,b) = 1$的两个数,最后两个位置构造剩余的$k$.剩余$k$最大到$k-\frac {105}{2}+1$.构造$k,k*2$不会超过$109$,剩下的1到质数里成对构造.最多需要$2*105$个质数,需要开到$107$ ##Code
阅读全文
摘要:原题链接 考察:构造 思路: 可以发现(i,i)点彼此距离为sqrt(2).我们构造彼此距离差1的点即可 ##Code #include <iostream> #include <cstring> using namespace std; int n,m; int main() { while(sc
阅读全文
摘要:原题链接 考察:推公式 思路: \(gcd(lcm(a,b),lcm(a,c))==gcd(a,lcm(b,c))\) ##Code #include <iostream> #include <cstring> using namespace std; typedef long long LL; c
阅读全文
摘要:原题链接 考察:构造 参考官方题解的思路: 假定原序列是从小到大排序的: \(a:1,2,3,4,5\) 将原序列左移或者右移一位,就可以使得子序列的和不同. \(b:2,3,4,5,1\) 证明: (1) 不考虑原序列最大的数,其他位上的每一位数都是$a[i]<b[i]$,如果$S$内没用原序列最
阅读全文
摘要:原题链接 考察:构造 思路: 对于n,如果每次x都能+-(n-1)的倍数,那么一定可以使x变成n的倍数. \(x = n*x-(n-1)*x\) \(x+(n-1)x = n*x\) 由此这三步为: 使a[1~n-1]变为n的倍数 使a[n]变成0 使a[1~n]变成0 ##Code #includ
阅读全文
摘要:原题链接 考察:构造 思路: 这题的构造应该很简单吧....两两构造即可.本蒟蒻想到了正确思路但被我否了!!!我是彩笔WA两次!!!! Code #include <iostream> #include <cstring> #include <algorithm> using namespace s
阅读全文
摘要:原题链接 考察:构造 思路: 异或和为u,数值和为v.如何判断不可能成立? u>v 即不成立.很明显因为u是v的不进位加法. u&1 != v&1 .正如上面说u是v的不进位加法.进位是不会改变奇偶性的.理性证明就是 v = u + 2*(u&v) u&v得到u哪些位置该进位,把它们左移一位即可.
阅读全文
摘要:原题链接 考察:构造 思路: 求所有构造图内任意两点Mex(u,v)最大值最小的构造图. 考虑如何求Mex(u,v)的最大值.在同张图上,路径更长的边比路径更短的边Mex值要大.所以我们考虑树上的"链". 如果只有一条链,任意构造即可. 如果有>1条链子,由贪心思想,我们不要让0,1,2..在一条边
阅读全文
摘要:原题链接 考察:思维 思路: 我是菜狗,连A题都不会.这道题实际就是1和n-1. ##Code #include <iostream> using namespace std; int n; int main() { int T; scanf("%d",&T); while(T--) { scanf
阅读全文
摘要:原题链接 考察:思维+构造 打死本蒟蒻也想不到系列 思路: 当(n+1)n = n 此情况不存在 即 n = -1 (n+1)n = n+1 此情况不存在 n = 1 1 #include <iostream> 2 #include <cstring> 3 #include <vector> 4 #
阅读全文
摘要:原题链接 考察:贪心 思路: 由贪心可得,最长上升子序列要求前面尽可能的小,最短上升子序列要求前面尽可能的大.如果没有<>的限制,那么最长上升子序列是1 2 3 4...n,最短上升子序列是n n-1...1.对于最长上升子序列,每有一个>说明前后需要互换位置,对于最短上升子序列,每有一个<说明前后
阅读全文