合集-构造

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

点击右上角即可分享
微信分享提示