合集-构造
摘要:原题链接 题解 1.任意两条边在且仅在一条链上 2.一定存在一条链使得其包含边权为0,1的边,这个时候我们要让2不在01所在的链上,即如下情况: 此时01所在链答案为2,02所在链答案为一 3.如果树退化成了链,那么不管怎么构造都一样 由此得出,找出这样 的 T 型节点,即含有三条边的节点,然后在它
阅读全文
摘要:原题链接 题解 观察数据范围,看到 \(n<=5000\) 便确定了 \(O(n^2)\) 左右的算法,这样一来我可以遍历所有的区间 虽然每个 \(f(k)\) 对应的答案区间都不同,但一定能遍历到,所以我可以再遍历一遍k,算出以该区间为答案区间时的 \(f(k)\) 但是这样一来时间复杂度就超了,
阅读全文
摘要:原题链接 题解 只需要存在两个叶子节点之间距离等于d就好了,于是我们构造一条链,令节点一为滑动变阻器,则根据d改变与节点n的距离即可 code #include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while
阅读全文
摘要:原题链接 题解 1.题目对 \(i,j\) 没有限制,也就是说,i可以大于j,可以小于j,也可以等于j 2.找普适规律。不管谁和谁成功配对,要么两个数长度相等;要么前面的数长度大于后面的数,于是前面的数分后半部分出来;要么后面的数大于前面的数,于是后面的数分前半部分出来; code #include
阅读全文
摘要:原题链接 题解 集合内元素最大不超过 \(2n-1\) ,最小不小于 \(1\) 如果按对角线排列,则可以得到所有偶数,把其中一颗棋子往旁边移,可以得到所有奇数 code #include<bits/stdc++.h> using namespace std; int main() { int t;
阅读全文
摘要:原题链接 题解 从小正方形到大正方形,有四个变化方向,分别是左上、右上、右下、左上。 分类讨论模拟即可 code #include<bits/stdc++.h> using namespace std; int main() { int n,x,y; cin>>n>>x>>y; puts("Yes"
阅读全文
摘要:原题链接 题解 真的bt啊 由于m没有限制所有测试用例的总和,所以m可以近似看为1e9,也就是说,除了输入以外,不能有任何对m的处理(常数乘上1e9) 考虑菊花图,任意两点之间最多只有一个陌生点,而且 \(m\lt n\) 所以找出那个没有出现过的中间点,作为菊花图的中心 md!!构造题!! cod
阅读全文
摘要:原题链接 题解 1.最小距离是n+m-2 2.后退多少就要前进多少,所以合法距离一定是偶数 3.猜测并验证n+m,n+m+2,n+m+4是否可行 4.如果n+m,我可以在终点设一个弯 5.如果n+m+2,我可以在起点设一个弯 6.两个弯可以组成任意偶数 code #include<bits/stdc
阅读全文
摘要:原题链接 题解 1.第 \(i\) 个位置上的数,对 \(S\) 的贡献最大不会超过 \(a_i+i\),我们令其为 \(c_i\) 2.我们不去细想如何操作才能得到最优解,而是去想第一大的 \(b\) 是多少?第二大的 \(b\) 是多少? 3.对 \(c_i\) 降序排序得到 \(b_i\),如
阅读全文
摘要:原题链接 题解 1.坐标i,j中,一定有一个值为n-1 2.所以另外一个数就是n-1在二进制表示下0的位置变成1,1的位置变成0的数 3.如何找到最大值?答:自己和自己或找出最大的 4.如何找到另外一个数?答:找出和最大值或最大的,再找出这些数中最小的 code #include<bits/stdc
阅读全文
摘要:原题链接 题解 1.\(LIS(a)\) 已经改变不了了,所以要让插入的 \(b\) 尽量少地增加 \(LIS\) 所以要降序、从左到右插入 2.\(a\) 的相对顺序不变 3.此时已知两个数组的相对顺序,因此我们可以贪心地输出两个数组顶端元素中较大的那个 为什么可以这样? 我们假设输出顶端元素较小
阅读全文
摘要:原题链接 题解 1.每一个1对答案的贡献为其前面0的个数 2.不难想到二进制,即每遇到 \(2^k\) 就考虑要不要放一个1 3.但是这样长度会超标,所以我们将较大的 \(2^k\) 表示成 \(2^{k_1}*2^{k_2}\),其中 \(k_1+k_2==k\),即在 0 的个数为 \(2^{k
阅读全文
摘要:原题链接 题解 考,纯纯找规律,对于区间 \([l,r]\),其元素一定能全部变成 \(r-l+1\) 遍历所有区间优先修改覆盖之后能增加 \(sum\) 且区间大小更小的区间 code #include<bits/stdc++.h> #define ll long long using names
阅读全文
摘要:原题链接 真恶心 code #include<bits/stdc++.h> #define ll long long using namespace std; const ll N=114514; ll a[200005],d[200005]; bool solve() { ll n; cin>>n
阅读全文
摘要:原题链接 题解 构造题,先想特殊情况再验证 易得当 \(n<k\) 时不成立 当 \(n=k\) 时输出 1 否则,第一个柜台卖的价格 \(p_1 \geq 2\) 且最多能卖 \(\lfloor\frac{n}{p_1} \rfloor + n\mod p_1\) 个,且最大值出现在 \(p_1=
阅读全文
摘要:原题链接 题解 每行有 a 个,所以总共有 \(n\cdot a\) 个 每列有 b 个,所以总共有 \(m\cdot b\) 个 所以要满足 \(na=mb\) 想象一下这个场景:每一行,每次往当前列中,最左端的一最少的列的开始连续放置1 code #include<bits/stdc++.h>
阅读全文

浙公网安备 33010602011771号