合集-codeforces

摘要:原题链接 导论 1.数列末尾插入一个没有在数列中出现过的数,然后对数列中的每个数加上x的若干倍数(其中的x对于每个数而言均相同),使得数列中的所有数均相等 2.由导论1可以推出,x一定是 \(|a[i]-a[j]|(1\leq i,j\leq n)\)的最大公约数 3.导论2的时间复杂度显然太高了, 阅读全文
posted @ 2023-12-06 15:41 纯粹的 阅读(70) 评论(0) 推荐(0)
摘要:原题链接 不知道这个思想叫什么,应该叫结果思想 导论 如果存在一个最长的字符串,我又没有可能把他消掉? 答案是,只要其他字符的长度大于等于最长字符串的长度,就一定能把他消掉。 所以我们不考虑字符串是怎么消除的,直接看结果。 原因解释如下 1.该最长字符串一定和其他字符相连,则消除操作显然。 2.如果 阅读全文
posted @ 2023-12-06 10:21 纯粹的 阅读(104) 评论(1) 推荐(1)
摘要:题目传送门 我是彩笔 二分trigger:存在一个最小值,使得当大于最小值时一定成立,小于最小值时一定不成立 #include<bits/stdc++.h> using namespace std; int n; int l[200005]={0},r[200005]={0}; int ss(int 阅读全文
posted @ 2023-12-08 15:20 纯粹的 阅读(67) 评论(0) 推荐(0)
摘要:绝,太绝了 看我娓娓道来 1.如果\(a+b+c\)过程中有进位,那么位数和肯定不等(+1-10) 2.由此可知,只要相加过程中没有进位的abc就是合法的 3.n的每一位等于abc对应的每一位的和 4.最后一步就是排列组合的思维,我真的词穷了。。。 代码 #include<bits/stdc++.h 阅读全文
posted @ 2023-12-08 16:04 纯粹的 阅读(45) 评论(0) 推荐(0)
摘要:戳这里,看原题 多重思想的巧妙结合 不多说了,看代码就懂了 #include<bits/stdc++.h> using namespace std; int up[200006]={0},down[200006]={0}; int a[200006]={0}; int main() { int t; 阅读全文
posted @ 2023-12-08 21:12 纯粹的 阅读(73) 评论(0) 推荐(0)
摘要:原题链接 1.导论 这道题能不能用贪心做?答案是不能,具体为什么已经有题解给出回答。当贪心无法求解时,我们考虑一下动态规划。 2.算法设计 对于任一节点,其最坏情况(即所需最大起始威力值,后文称最大值)是什么? 当第一个被攻击的怪物(以下称头怪物)在其右边时,其最大值为右边怪物的数量加上自身初始值, 阅读全文
posted @ 2023-12-11 16:33 纯粹的 阅读(45) 评论(0) 推荐(0)
摘要:原题链接 思路历程 1.一开始我不知道具体该怎么放,于是我按照样例2的顺序手画了一遍。 2.然后发现,对于一个n*n的矩形,再放一个格子最大能使其达到(n+1)*(n+1) 3.1*1时,放了1个格子,2*2时放了2个格子,由此可以推出放n个格子时最大能达到n*n 4.这道题就变成了,找出k使得k* 阅读全文
posted @ 2023-12-18 10:45 纯粹的 阅读(36) 评论(2) 推荐(1)
摘要:原题链接 反思:要把各种可能的情况都判断一遍再提交!不要急着提交 简介 仓库里有若干个二次方数,请问是否能取出若干数使得刚好等于给定数? 情况讨论 情况1.仓库里只有一个4,但是我要求2,求不得 情况2.仓库里有三个1,我要求3,能求 大概思路 从\(i\in[log2(v),0]\)遍历(从大到小 阅读全文
posted @ 2023-12-19 10:48 纯粹的 阅读(139) 评论(0) 推荐(0)
摘要:原题链接 快速读题 将所给字符串分为两个部分,前半部分为a,后半部分为b。求问是否存在某种分法使得a<b 思路:贪心 分割方法:字符串的第一个数一定非零作为a的开头,找到第二个非零数作为b的开头 判断方法:因为\(ab\)长度不超过8,而int型最大约\(2\cdot10^{10}\),所以可以直接 阅读全文
posted @ 2023-12-19 11:32 纯粹的 阅读(72) 评论(0) 推荐(0)
摘要:原题链接 反思 要明确每个变量的含义!!! 读题 1.取一对01置换,或者删掉一个元素,使得经过若干次改变后的序列\(t\),和\(s\)的前\(|t|\)项元素各不相同。求问最少要删掉几个元素? 一些事实的思考 1.对于一个给定的序列\(a\),和另一个 “0的个数”与“1的个数”均相同,但是排列 阅读全文
posted @ 2023-12-19 11:51 纯粹的 阅读(103) 评论(0) 推荐(0)
摘要:原题链接 结合样例读题 1.输入序列代表每一时刻思考的题目 2.如果思考的题目时长超过给定值就代表题目解决。 综上 如果一个字符的出现次数大于给定值就代表解决了这个问题。 代码 #include<bits/stdc++.h> using namespace std; int main() { int 阅读全文
posted @ 2023-12-20 18:30 纯粹的 阅读(41) 评论(0) 推荐(0)
摘要:原题链接 快速读题 给出一个序列,使其满足\(a[i]>a[i-1],i>1\)成立的次数恰好为k 思路 只要满足条件的序列都算作成立,我们就可以特殊化 先做出一个单增序列,由于前半部分所有元素都满足条件,所以前半部分保留(k+1)个元素,翻转后(n-k-1)个元素 但是sort默认升序,所以我们倒 阅读全文
posted @ 2023-12-20 18:48 纯粹的 阅读(26) 评论(0) 推荐(0)
摘要:原题链接 导论 1.第一想法是贪心,但是很显然,贪心不行,如果a[i]很小,b[i]很大,b[i]就永远不会用到 2.所以要有动态规划的思想,即把每种可能的情况都保留下来,以后可能用到 一些事实 不管我怎么选择完成任务的顺序,我至少会把前i种任务完成至少一遍,即a[i] 在假设我最多只完成到前i种任 阅读全文
posted @ 2023-12-20 18:56 纯粹的 阅读(37) 评论(0) 推荐(0)
摘要:原题链接 穷举,属于模拟题,不要害怕 注意,判断三天互不相同时要判断三次:a!=b,b!=c,c!=a 代码 #include<bits/stdc++.h> #define ll long long using namespace std; struct unit { ll v; ll d; }; 阅读全文
posted @ 2023-12-20 19:00 纯粹的 阅读(86) 评论(0) 推荐(0)
摘要:原题链接 导论,有点博弈论的感觉? 每个人轮流选一个大家都有的球,然后自己扣一个球,对方扣完。问女生剩下的球减去男生剩下的球,最大值是多少? 一些条件 1.初始每个人每种球都有 2.女生想使答案值大一点,男生想使答案值小一点,换句话说,女生想使\(A\)值大一点,男生想使\(B\)值大一点,每个人都 阅读全文
posted @ 2023-12-20 19:15 纯粹的 阅读(53) 评论(0) 推荐(0)
摘要:花了近1h没做出来的题,放弃吧。 1.用你目前的方法,绝壁做不出来,赶紧看答案去吧。 2.绝壁有一个你考虑不到的点,赶紧看答案吧,收获不比你自个熬来的小。 3.你一定缺乏相关逻辑链/基础知识作为支撑,赶紧看答案然后刷相关简单题吧。 4.再者,你看答案搞懂也要花很久,何必浪费时间?别提那可笑的自尊了 阅读全文
posted @ 2023-12-20 23:05 纯粹的 阅读(66) 评论(2) 推荐(0)
摘要:原题链接 前言 一道精简但是内容丰富的题 一些事实 1.循环左移len位后数组的节点对应原数组的节点,相当于在无限自复制循环的数组中将原来的节点右移len位 2.如果该数组能被定点数组循环左移x位得到,那么该数组最后一个节点的值一定是x 3.不管怎么位移,可能的数组最多只有n种不同的情况(1~n分别 阅读全文
posted @ 2023-12-21 11:02 纯粹的 阅读(89) 评论(0) 推荐(0)
摘要:原题链接 模拟+去重 代码 #include<bits/stdc++.h> using namespace std; int l[4]={1,1,-1,-1},r[4]={1,-1,-1,1}; struct unit { int x,y; bool operator<(const unit& ot 阅读全文
posted @ 2023-12-23 16:12 纯粹的 阅读(28) 评论(0) 推荐(0)
摘要:原题链接 题解,看完你对最大公约数,求余一定有更深的认识 事实1.当序列中有奇数又有偶数时,2就是那个k 事实2.当 \(a[i] \ mod \ b = c,\forall i\in[1,n]\)时 $ a[i] \ mod \ 2b = c \ ,if(a[i]//b)==$偶数 $ a[i] 阅读全文
posted @ 2023-12-27 17:11 纯粹的 阅读(25) 评论(0) 推荐(0)
摘要:原题链接 简化题目 有一些左端点,右端点和权重,总价值是区间的长度乘上权重(区间长度=右端点-左端点),求最小总价值 开始思考 事实1.所有区间长度加起来是个定值 开始思考:能不能贪心做?答案是能。 在贪心的情况下,交换任意两个区间的端点或权重都会使总价值上升。(可以简化到只有n=2的情况考虑) 细 阅读全文
posted @ 2023-12-27 21:03 纯粹的 阅读(45) 评论(0) 推荐(0)
摘要:原题链接 什么时候无解? 有解计算 code #include<bits/stdc++.h> #define ll long long using namespace std; ll a[200005]={0}; int main() { ll t; cin>>t; while(t--) { ll 阅读全文
posted @ 2023-12-28 18:16 纯粹的 阅读(43) 评论(0) 推荐(0)
摘要:原题链接 细节 1.如果b相乘能达到2023,那么b一定是2023的因子,即2023%b==0 2.只要有1个b不是2023的因子,就no 3.如果用乘法判定是否达到2023,那么有可能会类型溢出(5个不大于2023的数相乘) 综上所述 代码 #include <bits/stdc++.h> usi 阅读全文
posted @ 2023-12-31 12:27 纯粹的 阅读(50) 评论(0) 推荐(0)
摘要:原题链接 题记 1.题目漏了个说明条件,应该说明所给数据一定能找到对应的x 例如a=2,b=6就找不到相对应的x 2.如果一定存在对应的x,那么b一定是x除以x最小的因子,a一定是x除以x第二小的因子 如果第二小的因子不是由第一小的因子的平方得到的,那么\(lcm(a,b)\)一定能找到x 否则再乘 阅读全文
posted @ 2023-12-31 13:19 纯粹的 阅读(68) 评论(0) 推荐(0)
摘要:原题链接 题解 事实1.两个数合并后的数一定是偶数 事实2.如果没有发生奇数和偶数合并,那么最终的结果一定是所有数的和 事实3.每发生一次奇数和偶数合并,最后的结果会减一 总结 综上所述,Masha会尽量选择同奇或同偶合并,但在有同奇的情况下,会优先选择同奇,因为合并会产生偶数,且Olya需要用到奇 阅读全文
posted @ 2023-12-31 13:53 纯粹的 阅读(50) 评论(0) 推荐(0)
摘要:原题链接 题解链接 code #include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n; cin>>n; if(n==1) { puts("1"); continue; } 阅读全文
posted @ 2024-01-02 10:26 纯粹的 阅读(66) 评论(0) 推荐(0)
摘要:原题链接 读题 所有人的速度相同,也就是说,如果大家都在动,那么大家永不相交。所以相交的情况有且仅有b到终点了,而a还在b的后面,且a的终点在b的后面 将上述情况模型化后,就是求每个人行动的区间包含了多少人,然后对每个人求和 题解 再度简化,对于第\(i\)人来说,就是求\(r\)小于它且\(l\) 阅读全文
posted @ 2024-01-02 11:13 纯粹的 阅读(49) 评论(0) 推荐(0)
摘要:原题链接 直接看代码 #include<bits/stdc++.h> using namespace std; int a[200005]={0}; int n; int check(int k) { int m=0;//任何数与零 的gcd都是其本身 for(int i=1;i<=n-k;i++) 阅读全文
posted @ 2024-01-15 19:39 纯粹的 阅读(34) 评论(0) 推荐(0)
摘要:原题链接 题记,一道思考加编写加优化耗时2h的题 1.核心:抵达终点的路途中,如果换自行车,一定是换一辆速度系数更小的车 2.从速度系数最小的城市出发,到达终点的cost等于其系数乘上到达终点的最小距离 3.从速度系数第二小的城市出发,到达终点的最小值一定是直接往终点走和先去速度系数最小的城市之后再 阅读全文
posted @ 2024-01-16 14:39 纯粹的 阅读(30) 评论(0) 推荐(0)
摘要:原题链接 题记 事实1.求谁能把谁吃掉 事实2.当\(dx\)为奇数时,如果非平局一定是alice吃掉bob,偶数同理 事实3.当吃掉事件发生时,两颗棋子的\(x\)和\(y\)一定相同 事实4.由于已知谁会吃谁会被吃,被吃的棋子要使二者的\(dy\)尽可能的大,吃的棋子要使\(dy\)尽可能地小, 阅读全文
posted @ 2024-01-17 14:05 纯粹的 阅读(80) 评论(0) 推荐(0)
摘要:原题链接 太巧妙了!! 关键1:把开着的灯当成黑点看待 关键二:如图 更多细节请看代码 code #include<bits/stdc++.h> using namespace std; int to[100005];//代表会被我影响的灯,抽象成边 void solve() { int n; in 阅读全文
posted @ 2024-01-17 15:32 纯粹的 阅读(35) 评论(0) 推荐(0)
摘要:原题链接 分析 1.如果某次操作之后,数组的长度大于等于k,我们把这样的操作叫最后操作,且最后操作之后的操作都不用考虑,因为不会影响前面的数组,我们把这样 2.最后操作只有两种,一种是加法,一种是乘法 如果是加法,那么k一定等于此时数组的长度,对应的值一定是这次加法加上去的值,也就是末尾值 如果是乘 阅读全文
posted @ 2024-01-17 20:06 纯粹的 阅读(57) 评论(0) 推荐(0)
摘要:原题链接 题解 1.最笨的想法,链表,每次在还没被杀死的怪物里遍历一遍,如果被杀死了就从链表中删除这个节点 但是TLE on #7 2.进阶想法,仍然是链表,我们想,如果有些怪物永远都不会被杀死,那我们就没必要遍历它。所以我们从可能被杀死的怪物中遍历 如果一个怪物这个回合被杀死,但是在上个回合中没有 阅读全文
posted @ 2024-01-22 21:08 纯粹的 阅读(35) 评论(0) 推荐(0)
摘要:原题链接 题解 太巧妙了 1.对于一个递增子序列个数为 \(sum\) ,元素值域为 \([l,r]\) 的序列而言 在最右端插入一个 \(l-1\) ,对 \(sum\) 的影响是 \(+1\) \(r+1\) ,对 \(sum\) 的影响是 \(*2\) 由于乘二加一可以在两百次操作内使 \(s 阅读全文
posted @ 2024-01-23 01:10 纯粹的 阅读(33) 评论(0) 推荐(0)
摘要:原题链接 题解,太抽象了 最优情况一定可以是这样: Code #include<bits/stdc++.h> #define ll long long using namespace std; ll a[200005]={0}; ll b[200005]={0}; ll l[200005]={0}, 阅读全文
posted @ 2024-01-24 22:20 纯粹的 阅读(45) 评论(0) 推荐(0)
摘要:原题链接 思路简述 二维差分+矩阵旋转 思路详述 1.二维差分,对于每一个标签而言,有对一维的影响和二维的传递之分 2.为什么要差分?对于每一个目标而言,它对以其为左上角顶点,k为边长的三角形内的点都有一个贡献,这种范围内的累加就考虑用前缀和(这里是二维差分) 3.为什么要矩阵旋转?由于在某个点喷的 阅读全文
posted @ 2024-01-25 19:05 纯粹的 阅读(43) 评论(0) 推荐(0)
摘要:原题链接 如何得到思路 1.我们不能模拟题目的意思去做,因为那样会超时(别问我怎么知道的)。我们要抓住一些事实 2.对于任意序列想要得到最小值,可以只有两种分法: 一连串和为零的序列 长度为1的序列 3.最长的和为零的序列长度必为\(2*min(a,b)\),其中ab分别代表01的个数,剩余的序列无 阅读全文
posted @ 2024-01-27 16:30 纯粹的 阅读(46) 评论(0) 推荐(0)
摘要:原题链接 忠告1:要学会计算时间复杂度!! 忠告2:要学会抓事实,不要掉进题目直观模拟的陷阱里 事实 1.任意k个数的 \(gcd\) 一定可以是这k个数的最小值,这里以 \(k=3\) 举例 假设 \(gcd(a_1,a_2,a_3)=m\) ,则 \(a_1=k_1m,a_2=k_2m,a_3= 阅读全文
posted @ 2024-01-28 17:25 纯粹的 阅读(272) 评论(0) 推荐(0)
摘要:原题链接 前情提要 限于自身知识水平的储备不足,无法对这道题的贪心算法做出一个证明,待来日学识渐长把这个证明写下 题解 我们可以把字符串s分成若干区间,每一区间对应一位数字的储备 已知长度为n,那我们就一位一位地遍历,一旦所有元素遍历齐就开始下一位的遍历,因为再往后遍历也不起作用 然后取每一位最后一 阅读全文
posted @ 2024-01-28 23:05 纯粹的 阅读(37) 评论(0) 推荐(0)
摘要:原题链接 核心 设 \(p[i]\) 代表离 \(a[i]\) 左边最近的不同元素的位置 如果 \(p[i]\) 小于 \(l\) 代表区间内元素皆相同 传递规则: 如果 \(a[i-1]!=a[i]\) 那么 \(p[i]=i-1\) 否则 \(a[i]\) 的 \(p\) 就等于 \(a[i-1 阅读全文
posted @ 2024-02-08 23:20 纯粹的 阅读(38) 评论(0) 推荐(0)
摘要:原题链接 经过若干组数据发现贪心可行性后试图证明 请移步 code #include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n,ans=0; cin>>n; int x=2e9 阅读全文
posted @ 2024-02-10 18:42 纯粹的 阅读(39) 评论(0) 推荐(0)
摘要:原题链接 题解 1.把分数中的除法用乘以逆元表示,在求模运算里的除法都可以用乘以逆元代替(如果除法的结果为整数),但是这里规定了可以用其表示,那就用其表示 2.读题 code #include<bits/stdc++.h> int mod=1e9+7; // 确保 mod 是一个整数 using n 阅读全文
posted @ 2024-02-12 15:08 纯粹的 阅读(33) 评论(0) 推荐(0)
摘要:原题链接 题解 再结合代码应该就能看得懂了吧。。。 至于赛时怎么想出来的。我是观察样例得出来的 时间复杂度 \(O(2·t·\sqrt{n})\) code #include<bits/stdc++.h> #define ll long long using namespace std; inlin 阅读全文
posted @ 2024-02-12 17:46 纯粹的 阅读(98) 评论(0) 推荐(0)
摘要:原题链接 题解 本题中,每一位数字的每一次变化都会对答案贡献1,所以对于第 \(i\) 位数字而言,它的贡献为从最左边到现在的数,设为 \(f[i]\) 所以答案为 \(\sum_{i=1}^{n}f[i]\),可以用高精度加法解决 然而这样一来时间复杂度就超了 \(O(t·n^2)\) 所以我们尝 阅读全文
posted @ 2024-02-18 22:53 纯粹的 阅读(91) 评论(0) 推荐(0)
摘要:原题链接 题解 如果 \((a_i+a_j)\ mod\ x==0\) 那么 \((a_i\ mod\ x+a_j\ mod\ x)\ mod\ x==0\) 如果 \((a_i-a_j)\ mod\ y==0\) 那么 \(a_i\ mod\ y==a_j\ mod\ y\) 所以我们可以把每个 阅读全文
posted @ 2024-02-19 18:44 纯粹的 阅读(80) 评论(0) 推荐(0)
摘要:原题链接 题解 细节很多的树形dp,请看代码 code #define ll long long #include<bits/stdc++.h> using namespace std; ll sit[100005]={0}; ll f[100005]={0}; vector<ll> G[10000 阅读全文
posted @ 2024-02-20 14:22 纯粹的 阅读(27) 评论(0) 推荐(0)
摘要:原题链接 题解 要让水平块尽可能多,垂直块尽可能少 垂直块最少为零,也就是说,一行里全部都是水平块,可不可能?答案是可能的,一定存在某种组合使得水平块刚好塞满一行 那么这种方块数最多的组合是多少?每个方块长度都为2,如果 \(m\) 为奇数,最后一个方块长度为 3 题解 #include<bits/ 阅读全文
posted @ 2024-02-28 14:17 纯粹的 阅读(30) 评论(0) 推荐(0)
摘要:原题链接 题解 逆序对数最小的排列是严格升序的排列,因此我猜想有一个严格升序的排列最优的 证明; 冒泡排序,我们把排列a中最大的元素不断地往右作相邻对换,这样一来,序列a的逆序对数必定减少一,序列b的逆序对数可能减少一,可能不变,可能加一,但是两个排列的总逆序对数不可能增加。 然后再逆着想验证了这种 阅读全文
posted @ 2024-02-28 16:03 纯粹的 阅读(34) 评论(0) 推荐(0)
摘要:原题链接 题解 既然是按位异或,那么我们尝试在二进制视角下考虑问题 我们发现,当两个数的同一位置上都有1的时候,这个1消与不消对结果没有影响,而这个位置上其中一个有一,另一个没有一时,我们可以通过x来转移一 所以在ab俩个数出现第一个10情况不同的位置之后,我们要尽可能地把剩余的一尽可能地移到较小的 阅读全文
posted @ 2024-02-28 16:12 纯粹的 阅读(72) 评论(0) 推荐(0)
摘要:原题链接 题意简述 把1移到移到左边最近的0的位置,请问形成一片连续的一需要移多少次? 题解 像坦克的履带,对于两群不相连的1,右边想和左边相连至少要走中间的0的数量的步数,这下就可以遇到零才执行收获操作了 code #include<bits/stdc++.h> using namespace s 阅读全文
posted @ 2024-02-28 16:17 纯粹的 阅读(73) 评论(0) 推荐(0)
摘要:原题链接 题解 什么时候会输? 首先我们要贪心一次性把离自己最近的怪物消灭掉,但是一回合内消灭掉了一个怪物之后还有剩余,我么就把剩余的扣在第二个离自己最近的怪物上 如果我当前回合没有消灭怪物,并且怪物下一回合就到零点,那我就输了 我们可以想象成这样的动画:我们每回合一次性往怪物身上丢出所有的手雷,手 阅读全文
posted @ 2024-02-28 16:54 纯粹的 阅读(50) 评论(0) 推荐(0)
摘要:原题链接 题解 给定数组c,和若干查询区间,请问能否改变区间中的每一个值且区间和还不变? 对于任意一个数,不是加就是减,而对于整个数组而言,加了多少就要减多少 而对于等于1的元素而言,只能加,因此我们令元素为1的为待加元素,其他元素均为待减元素 找出所有大于1的元素把他们变成一,然后差值累加到一个变 阅读全文
posted @ 2024-02-28 17:12 纯粹的 阅读(63) 评论(0) 推荐(0)
摘要:原题链接 题解 对于任何一个粘液块s而言,要么是从左边被吞并,要么是从右边被吞并,根据对称性,两边的决策是一样的,因此先考虑右边 对于被右边吞并而言,有以下几个特征 1.起始粘液一定是吞掉了s右边一整块连续的粘液 2.右边区间一定存在大小不同的相邻粘液,这样才能发动吞并 3.由一二猜想,只要存在不同 阅读全文
posted @ 2024-02-28 17:48 纯粹的 阅读(91) 评论(0) 推荐(0)
摘要:原题链接 题解 暴力可不可以关键看时间复杂度 x从1遍历到 log2(1e6) ,y同理 时间复杂度约为 \(O(20·20)\) 草 code #include<bits/stdc++.h> #define ll long long using namespace std; int main() 阅读全文
posted @ 2024-02-28 18:01 纯粹的 阅读(58) 评论(0) 推荐(0)
摘要:原题链接 题解 将序列排序后,设最小值为k,那么 \(2~n\) 的每个元素都可以表示为 \(nk+b,b\in[0,k-1]\) 如果 \(2~n\) 的元素中存在 \(k\) 且 \(b\) 均为零,一定失败 code #include<bits/stdc++.h> using namespac 阅读全文
posted @ 2024-02-28 18:49 纯粹的 阅读(64) 评论(0) 推荐(0)
摘要:原题链接 题解 对于一个数,我们将其转换成二进制,然后补零到31位 我们发现,能和数x配对的数只有一个,那就是 按位翻转后的x,即x和 \(2^{31}-1\) 异或的值 所以我们要找有没有能互相配对的值,以及组数,配对用map? code #include<bits/stdc++.h> using 阅读全文
posted @ 2024-02-28 19:13 纯粹的 阅读(48) 评论(0) 推荐(0)
摘要:原题链接 题解 如果一开始就把所有数乘起来,结果会太大,所以我们把逆着来,先找到最后一个元素,然后乘法求模 code #include<bits/stdc++.h> using namespace std; long long a[200005]={0},ans[200005]={0}; int m 阅读全文
posted @ 2024-02-28 19:20 纯粹的 阅读(29) 评论(0) 推荐(0)
摘要:原题链接 题解 每个种族的贡献是互不干扰的,因此只需要计算每个族群在每个组数的情况下的解然后累加就行了,由于每个族群在组数大于等于 \(c_i\) 的时候解数不变,所以这里用到了差分小技巧 然后就是计算每个族群在每个组数下的解就行了 code #define ll long long #includ 阅读全文
posted @ 2024-03-12 14:14 纯粹的 阅读(34) 评论(0) 推荐(0)