合集-codeforces
摘要:原题链接 导论 1.数列末尾插入一个没有在数列中出现过的数,然后对数列中的每个数加上x的若干倍数(其中的x对于每个数而言均相同),使得数列中的所有数均相等 2.由导论1可以推出,x一定是 的最大公约数 3.导论2的时间复杂度显然太高了,
阅读全文
摘要:原题链接 不知道这个思想叫什么,应该叫结果思想 导论 如果存在一个最长的字符串,我又没有可能把他消掉? 答案是,只要其他字符的长度大于等于最长字符串的长度,就一定能把他消掉。 所以我们不考虑字符串是怎么消除的,直接看结果。 原因解释如下 1.该最长字符串一定和其他字符相连,则消除操作显然。 2.如果
阅读全文
摘要:题目传送门 我是彩笔 二分trigger:存在一个最小值,使得当大于最小值时一定成立,小于最小值时一定不成立 #include<bits/stdc++.h> using namespace std; int n; int l[200005]={0},r[200005]={0}; int ss(int
阅读全文
摘要:绝,太绝了 看我娓娓道来 1.如果 过程中有进位,那么位数和肯定不等(+1-10) 2.由此可知,只要相加过程中没有进位的abc就是合法的 3.n的每一位等于abc对应的每一位的和 4.最后一步就是排列组合的思维,我真的词穷了。。。 代码 #include<bits/stdc++.h
阅读全文
摘要:戳这里,看原题 多重思想的巧妙结合 不多说了,看代码就懂了 #include<bits/stdc++.h> using namespace std; int up[200006]={0},down[200006]={0}; int a[200006]={0}; int main() { int t;
阅读全文
摘要:原题链接 1.导论 这道题能不能用贪心做?答案是不能,具体为什么已经有题解给出回答。当贪心无法求解时,我们考虑一下动态规划。 2.算法设计 对于任一节点,其最坏情况(即所需最大起始威力值,后文称最大值)是什么? 当第一个被攻击的怪物(以下称头怪物)在其右边时,其最大值为右边怪物的数量加上自身初始值,
阅读全文
摘要:原题链接 思路历程 1.一开始我不知道具体该怎么放,于是我按照样例2的顺序手画了一遍。 2.然后发现,对于一个n*n的矩形,再放一个格子最大能使其达到(n+1)*(n+1) 3.1*1时,放了1个格子,2*2时放了2个格子,由此可以推出放n个格子时最大能达到n*n 4.这道题就变成了,找出k使得k*
阅读全文
摘要:原题链接 反思:要把各种可能的情况都判断一遍再提交!不要急着提交 简介 仓库里有若干个二次方数,请问是否能取出若干数使得刚好等于给定数? 情况讨论 情况1.仓库里只有一个4,但是我要求2,求不得 情况2.仓库里有三个1,我要求3,能求 大概思路 从 遍历(从大到小
阅读全文
摘要:原题链接 快速读题 将所给字符串分为两个部分,前半部分为a,后半部分为b。求问是否存在某种分法使得a<b 思路:贪心 分割方法:字符串的第一个数一定非零作为a的开头,找到第二个非零数作为b的开头 判断方法:因为 长度不超过8,而int型最大约 ,所以可以直接
阅读全文
摘要:原题链接 反思 要明确每个变量的含义!!! 读题 1.取一对01置换,或者删掉一个元素,使得经过若干次改变后的序列 ,和 的前 项元素各不相同。求问最少要删掉几个元素? 一些事实的思考 1.对于一个给定的序列 ,和另一个 “0的个数”与“1的个数”均相同,但是排列
阅读全文
摘要:原题链接 结合样例读题 1.输入序列代表每一时刻思考的题目 2.如果思考的题目时长超过给定值就代表题目解决。 综上 如果一个字符的出现次数大于给定值就代表解决了这个问题。 代码 #include<bits/stdc++.h> using namespace std; int main() { int
阅读全文
摘要:原题链接 快速读题 给出一个序列,使其满足 成立的次数恰好为k 思路 只要满足条件的序列都算作成立,我们就可以特殊化 先做出一个单增序列,由于前半部分所有元素都满足条件,所以前半部分保留(k+1)个元素,翻转后(n-k-1)个元素 但是sort默认升序,所以我们倒
阅读全文
摘要:原题链接 导论 1.第一想法是贪心,但是很显然,贪心不行,如果a[i]很小,b[i]很大,b[i]就永远不会用到 2.所以要有动态规划的思想,即把每种可能的情况都保留下来,以后可能用到 一些事实 不管我怎么选择完成任务的顺序,我至少会把前i种任务完成至少一遍,即a[i] 在假设我最多只完成到前i种任
阅读全文
摘要:原题链接 穷举,属于模拟题,不要害怕 注意,判断三天互不相同时要判断三次:a!=b,b!=c,c!=a 代码 #include<bits/stdc++.h> #define ll long long using namespace std; struct unit { ll v; ll d; };
阅读全文
摘要:原题链接 导论,有点博弈论的感觉? 每个人轮流选一个大家都有的球,然后自己扣一个球,对方扣完。问女生剩下的球减去男生剩下的球,最大值是多少? 一些条件 1.初始每个人每种球都有 2.女生想使答案值大一点,男生想使答案值小一点,换句话说,女生想使 值大一点,男生想使 值大一点,每个人都
阅读全文
摘要:花了近1h没做出来的题,放弃吧。 1.用你目前的方法,绝壁做不出来,赶紧看答案去吧。 2.绝壁有一个你考虑不到的点,赶紧看答案吧,收获不比你自个熬来的小。 3.你一定缺乏相关逻辑链/基础知识作为支撑,赶紧看答案然后刷相关简单题吧。 4.再者,你看答案搞懂也要花很久,何必浪费时间?别提那可笑的自尊了
阅读全文
摘要:原题链接 前言 一道精简但是内容丰富的题 一些事实 1.循环左移len位后数组的节点对应原数组的节点,相当于在无限自复制循环的数组中将原来的节点右移len位 2.如果该数组能被定点数组循环左移x位得到,那么该数组最后一个节点的值一定是x 3.不管怎么位移,可能的数组最多只有n种不同的情况(1~n分别
阅读全文
摘要:原题链接 模拟+去重 代码 #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
阅读全文
摘要:原题链接 简化题目 有一些左端点,右端点和权重,总价值是区间的长度乘上权重(区间长度=右端点-左端点),求最小总价值 开始思考 事实1.所有区间长度加起来是个定值 开始思考:能不能贪心做?答案是能。 在贪心的情况下,交换任意两个区间的端点或权重都会使总价值上升。(可以简化到只有n=2的情况考虑) 细
阅读全文