codeforces
文章平均质量分 72
H-w-H
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #746 (Div. 2)(A,B,C)
Codeforces_Round#746(Div.2)A.Gamer_Hemose题意:思路:代码:B.Hemose_Shopping题意:思路:代码:C.Bakry_and_Partitioning题意:思路:代码:Codeforces_Round#746(Div.2)A.Gamer_Hemose题意:一个 BossBossBoss 的血量为mmm,有nnn把武器,每次能够使用一把武器,每把武器不能连续使用,问最少要几次才能杀掉BossBossBoss思路:选两个伤害最大的武器,交替使用。.原创 2021-10-07 18:36:58 · 524 阅读 · 1 评论 -
E. e-Government(AC自动机,fail树,树状数组)
E. e-Government题意:给出一些m个模式串和n个操作,操作分为3种:‘?’+字符串:查询字符串中 在模式串集合中的字符串 出现了多少次。‘+’+数字:将第几个模式串添加回模式串集合‘-’+数字:将第几个模式串从模式串集合中删除。思路:考虑暴力的做法:先对所有模式串建trie树,bfs找fail数组,用一个boo数组来表示某个字符串是否在模式串集合中。对于一个查询,字符串在trie树上跳fail,当跳到还在模式串集合中的节点时,答案++,输出答案。树状数组维护差分数组做法:原创 2021-09-03 15:25:14 · 198 阅读 · 1 评论 -
C. Need for Pink Slips
C. Need for Pink Slips问题:一个游戏,给出C,M,PC,M,PC,M,P三个事件,每个事件的概率是c,m,pc,m,pc,m,p,当出现事件PPP的时候,游戏结束。在每一轮游戏过程中c,m,pc,m,pc,m,p都会根据规则发生变化。问游戏进行多少轮的期望。规则:给定一个小数vvv。(c,m,p)=(0.2,0.1,0.7)(c,m,p)=(0.2,0.1,0.7)(c,m,p)=(0.2,0.1,0.7), v=0.1v=0.1v=0.1, 在发生事件C后,因为c>v原创 2021-07-08 21:27:09 · 587 阅读 · 3 评论 -
F. Lunar New Year and a Recursive Sequence(矩阵快速幂+BSGS)
F. Lunar New Year and a Recursive Sequence题意:给出f1=f2=⋯=fk−1=1f_1=f_2=\cdots=f_{k-1}=1f1=f2=⋯=fk−1=1和b1,b2⋯bkb_1,b_2\cdots b_kb1,b2⋯bk,还有递推方程fi=fi−1b1fi−2b2⋯fi−kbkf_i=f_{i-1}^{b_1}f_{i-2}^{b_2}\cdots f_{i-k}^{b_k}\\fi=fi−1b1fi−2b2⋯fi−kbk问原创 2021-05-08 20:59:09 · 1342 阅读 · 2 评论 -
C. Chef Monocarp(思维,dp)
C. Chef Monocarp问题:给出nnn道菜,每道菜有一个预期出锅时间tit_iti,但每分钟只能出一道菜,设第iii道菜的出锅时间为TiT_iTi,则会得到∣ti−Ti∣|t_i-T_i|∣ti−Ti∣的不愉悦值,问怎么安排出菜时间,才能使不愉悦值最小,输出最小值。给出一个引理:ti<tj且Ti>Tj⇒∣ti−Ti∣+∣tj−Tj∣>∣ti−Tj∣+∣tj−Ti∣t_i<t_j且T_i>T_j\\\Rightarrow\mid t_i-T_i\mid原创 2021-04-28 20:32:04 · 314 阅读 · 0 评论 -
D. Cut(质因子分解,倍增)
D. Cut题意:给出一个长度为n的序列,和q个询问,对于每个询问,求出最少分成多少个连续的子区间,使每个子区间的lcmlcmlcm等于子区间各个数的乘积。思路:质因子分解+倍增思想。预处理:利用质因子分解来找当前元素能够向后跳到的最远的位置(满足从开始位置到结束位置中的每个元素都互质)利用倍增的思想,来加速跳的过程。对于每个询问,只要从没有跳到边界,就一直往下跳,直到位置大于右边界,跳的次数加一就时答案。预处理:dp[i][0]dp[i][0]dp[i][0]表示区间[i,dp原创 2021-04-23 19:09:34 · 650 阅读 · 2 评论 -
Codeforces Round #717 (Div. 2)(A,B,C,D)
Codeforces Round #717 (Div. 2)A. Tit for Tat题意:给出一个长为nnn的序列,可以进行小于等于kkk次操作,每次操作能选择两个不同位置上的元素,一个加1,一个减1。求操作之后字典序最小的序列是什么。思路:每次都把最后一个元素加一,前面元素减一,该元素为0后,跳到下一个元素,直到k为0或到达最后一个元素,结束。参考代码:#include<bits/stdc++.h>using namespace std;typedef long long l原创 2021-04-22 23:33:43 · 136 阅读 · 2 评论 -
[#716]D. Cut and Stick(莫队,思维)
D. Cut and Stick题意:给出一个长度为n的序列,m个询问。对于每个询问,我们要将询问序列按要求划分成多个序列,使每个序列都满足条划分序列的方法:从序列中选取子序列来组成新的区间条件:设序列长度为lenlenlen, 序列中每种元素的个数不能超过⌈lend⌉\lceil\frac {len}d\rceil⌈dlen⌉。思路:我们设在序列中的出现次数最多的是xxx次,如果⌈lend⌉≤x\lceil\frac {len}d\rceil\le x⌈dlen⌉≤x。最优的解法就是2∗x原创 2021-04-21 20:08:10 · 209 阅读 · 1 评论 -
Codeforces Round #716 (Div. 2)(A,B,C,D)
Codeforces_Round_#716(Div.2)A.Perfectly_ImperfectArrayB.AND_0,Sum_BigC.Product_1_Modulo_NCodeforces_Round_#716(Div.2)A.Perfectly_ImperfectArray题意:给出一个序列,问是否存在一个子序列连乘不是完全平方数。思路:如果在序列中存在一个非完全平方数,那么一定存在子序列连乘不是完全平方数。我们就可以对序列的每个数质因子分解,看每个质因子的次数是不是偶数,如果存在不.原创 2021-04-20 15:10:40 · 147 阅读 · 0 评论 -
E. Colorings and Dominoes(思维,dp)
E. Colorings and Dominoes题意:n×mn\times mn×m的棋盘,有黑白两种颜色的位置,我们能将白色的位置涂成红色或蓝色。我们要把多米诺牌放在这些位置上,每两个连续位置能放一个,水平放两个位置,这两个位置必须是红色,垂直放两个位置,这两个位置必须是蓝色的。定义在对每个白色位置涂色后,能最多放的多米诺牌的数量为这种情况下的价值。问在这2k2^k2k(k为白位置个数)种情况下价值总和是多少,对998244353 取模。如何确定对行进行贡献的统计和对列进行贡献的统计不会产生原创 2021-04-19 21:28:35 · 529 阅读 · 3 评论 -
Codeforces Round #708 (Div. 2)(C1,C2)
[C1. k-LCM easy version](https://codeforces.ml/problemset/problem/1497/C1)[C2 k-LCM (hard version)](https://codeforces.ml/problemset/problem/1497/C2)C1. k-LCM easy version问题:将nnn分解成k个数相加(k为3),使得这k个数的lcm≤n2lcm\le \frac n2lcm≤2n思路:如果n是奇数提出一个1,剩下一个偶数平分.原创 2021-04-19 16:29:15 · 142 阅读 · 0 评论 -
D. Game With Array(思维+构造)
D. Game With Array题意:给出N,SN,SN,S要你求出一个长为NNN,和为SSS的数组,并问你能不能找到一个KKK,使数组的任意一个子数组的和都不等与KKK。思路111:如果S/N>=2S/N>=2S/N>=2,我们就能这样安排数组,前N−1N-1N−1个设为111,最后一个设为S−N+1S-N+1S−N+1,只要设K=S−NK= S-NK=S−N那就满足题意了,如果S/N=1S/N=1S/N=1,我们可以发现N−1>S−NN-1>S-NN−1>S−原创 2020-07-19 00:36:23 · 186 阅读 · 0 评论 -
B. Most socially-distanced subsequence(思维+模拟)
B. Most socially-distanced subsequence题意:给出一个数组aaa,找到数组中的一个子序列sss(长为xxx),满足“∑i=1x∣s[i]−s[i−1]∣\sum_{i=1}^x|s[i]-s[i-1]|∑i=1x∣s[i]−s[i−1]∣最大”。如果有多个答案就出xxx较小的子序列思路:我们观察一个递增的序列s={1,2,3,4,6}s = \{1,2,3,4,6\}s={1,2,3,4,6},则:∑i=1x∣s[i]−s[i−1]∣=5\sum_{i=1}^原创 2020-07-18 23:31:32 · 505 阅读 · 0 评论 -
C. Element Extermination(贪心,模拟,结论)
C. Element Extermination题意:给出一个数组,相邻两个数字满足Ai<Ai−1A_i < A_{i-1}Ai<Ai−1,就可以删除其中一个数字。问是否存在一种删除方案,使数组中只剩下一个元素。思路: 栈模拟结论栈模拟用栈来模拟数字在数组中的 先后顺序(先后入栈)和贪心决策(是否入栈,是否出栈)设要入栈元素a,栈顶元素b1.如果栈为空,直接入栈。2.如果a<ba < ba<b,直接入栈。3.如果a>ba > ba>原创 2020-07-10 15:57:52 · 613 阅读 · 0 评论 -
C. Even Picture(思维,构建)
C. Even Picture题意:给出一个无限大的网格图,要求你在上面涂色,每个涂色方格周围必须有偶数个涂色方格。要求构造出一种涂色方法:只存在n个涂色方格,周围有4个涂色方格(主要是理解题意)。可以按照图像一直往下延伸。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 3e5+10;const int inf = 0x7ffffff;int f[][2] = {-1,原创 2020-07-09 20:23:42 · 267 阅读 · 0 评论 -
B. Subsequence Hate(思维,树状数组)
B. Subsequence Hate题意:给出一个由01组成的字符串,可以随意将 0改10改10改1 或 1改01改01改0。问最小改变次数,使字符串的所有子序列中都不存在101101101或010010010。思路:把字符串变成0001111,111000,00000,1111110001111,111000, 00000, 1111110001111,111000,00000,111111的形式就行了,我们对第i个元素,要么把它的左边+自己变成1,它的右边变成0它的左边+自己变成1,它的右边变原创 2020-07-08 22:27:27 · 340 阅读 · 0 评论 -
C. A Cookie for You(思维,贪心)
C. A Cookie for You题意:给出4个数,a,b,c,da, b, c, da,b,c,d,表示第一类饼干有aaa个,第二类饼干有bbb个。第一类客人有nnn人,第二类客人有mmm人。第一类客人会在a>ba>ba>b时会选aaa类,否则会选bbb类。第二类客人会在a>ba>ba>b时选b类,否则会选aaa类。问怎么安排客人选饼干可以使每个客人都按上面的规则选到饼干。思路:按照规则第一类客人在a>ba>ba>b选aaa,在a=ba原创 2020-07-04 23:16:42 · 216 阅读 · 0 评论 -
Codeforces Round #653 (Div. 3)(A, B, C, D)
Codeforces Round #653(Div3)A. Required RemainderB. Multiply by 2, divide by 6C. Move BracketsD. Zero Remainder ArrayA. Required RemainderA. Required Remainder题意:给出x,y,nx, y, nx,y,n,求一个最大的k∈[1,n]k\in[1, n]k∈[1,n]使k%x=yk\%x = yk%x=y。思路:已知k=u∗x+yk = u*x +原创 2020-06-29 21:19:10 · 156 阅读 · 2 评论 -
C. Social Distance(暴力,贪心)
C. Social Distance题意:给出一个n, k和一个长度为n的只包含01的字符串。每两个1之间至少相隔k,问最多能够将几个0改成1。贪心策略:我们在两1之间求有多少个位置是能够将0改1的。因为在两个1之间,所以既要满足左边相隔k(至少),也有要满足右边相隔k。我们先去掉右边必须空掉的0,这样一来我们就只需考虑前面1的位置前面1的位置前面1的位置和要改成1的位置要改成1的位置要改成1的位置的距离。等同于每个1往前带k个0,便于计算。例子:k = 2,10000000001,加黑部分为可选原创 2020-06-21 14:05:13 · 605 阅读 · 0 评论 -
B. Codeforces Subsequences(思维,暴力)
B. Codeforces Subsequences问题:求原创 2020-06-21 13:22:19 · 585 阅读 · 0 评论 -
B. Ternary String(尺取法)
B. Ternary String题意:给一个只含1,2,3的字符串,求包含这三个数的最小区间。思路:尺取法。两个变量i,ji, ji,j,表示区间的起点和终点。起点从0开始——i=0,j=0,[1]ji=0,j=0,_{[1]}ji=0,j=0,[1]j一直递增直到找到一个满足条件的区间,然后轮到iii递增了,区间开始缩小,找到jjj位置下,满足条件的区间的最小长度,直到区间[i,j][i,j][i,j]不再满足条件。然后重复上面的工作[1]_{[1]}[1],直到j=字符串.lenj=字符串原创 2020-06-20 21:53:08 · 305 阅读 · 0 评论 -
A. Sequence with Digits(思维)
A. Sequence with Digits公式:an+1=an+minDigit(an)⋅maxDigit(an)a_{n+1}=a_n+minDigit(a_n)⋅maxDigit(a_n)an+1=an+minDigit(an)⋅maxDigit(an)含义:minDigit(an),anminDigit(a_n),a_nminDigit(an),an的每个十进制位置上的最小值。maxDigit(an),anmaxDigit(a_n),a_nmaxDigit(an),an的每个十原创 2020-06-20 21:33:08 · 394 阅读 · 0 评论 -
B. Young Explorers(思维,贪心)
B. Young Explorers题意:给出n个人,第iii个人有一个属性eie_iei,只有团队中的人数大于等于eie_iei时,这个人才可以加入这个团队中,问最多能够组成多少团队。贪心策略:每个队都只用最少的人,组成一个队。#include<bits/stdc++.h>using namespace std;const int N = 2e5+10;int s[N];int main() { int t; scanf("%d", &t); while(t--原创 2020-06-20 21:20:31 · 270 阅读 · 0 评论 -
C. Similar Pairs(思维)
C. Similar Pairs问:给出一个数组,求是否能够使所有的数都可以“类似”匹配。”类似“:两个数具有相同的奇偶性,或差的绝对值为1。思路:我们求出奇数的个数x,偶数的个数y,相邻元素的对数z。如果x是偶数,y是偶数,那对于每个元素都可以找到一个匹配。如果x是奇数,y是奇数,那只要z>0,就可以用一个奇数一个偶数凑成一对。剩下的就成了上面的情况了。如果x,y是一奇一偶,那就一定不能凑成对。因为要用到z的话x,y都会消耗,x,y始终都是一奇一偶,回到刚开始的问题。#include&原创 2020-06-19 20:55:42 · 549 阅读 · 0 评论 -
D. Buying Shovels(暴力,小技巧)
D. Buying Shovels问题:给出a,b,问在区间[1, b],找到一个a的最大的因子n,使a/n最小。暴力原创 2020-06-19 16:13:47 · 246 阅读 · 0 评论 -
A. XXXXX(codeforces)
A. XXXXX问题:给出一个数组a,长度n,一个整数b。求区间之和不是b的倍数的最长子区间。若:所有的数都是b的倍数,那无论a的那个子区间的和都是b的倍数。若:a的总和不是b的倍数,那答案就是整个数组的长度。若:a的总和是b的倍数,则从左往右找第一个不是b的倍数的数的下标x,从右往左找第一个不是b的倍数的数的下标y,然后取max(n−len([1,x]),len([1,y)))max(n-len([1,x]), len([1,y)))max(n−len([1,x]),len([1,y)))解释一原创 2020-06-16 23:30:38 · 6534 阅读 · 0 评论 -
C. Johnny and Another Rating Drop(codeforces)
C. Johnny and Another Rating Drop问题:给出一个数n,求从0到n相邻两个数二进制不同位数的总和。例如1=(01)2,2=(10)21=(01)_2,2=(10)_21=(01)2,2=(10)2不同位数就为2。我们列举一下找找规律:0=00000=00000=00001=00011=00011=00012=00102=00102=00103=00113=00113=00114=01004=01004=01005=01015=01015=01016=01原创 2020-06-16 22:44:07 · 168 阅读 · 0 评论 -
Educational Codeforces Round 89 (Rated for Div. 2)(A,B,C,D)(0)
A. Shovels and SwordsB. ShuffleC. Palindromic PathsD. Two DivisorsA. Shovels and Swords问题:给两种材料A,B,每两个A和一个B可以做一个X换一个钻石,每一个A和两个B也可以做一个Y换一个钻石。给出A,B的个数n, m,问最多能得到多少钻石?如果n和m差不多,我们就可以先针对性的消耗A或B使n = m。假设n > m,因为X消耗两个A,一个B,那A每次就多消耗一个,设t,n-2t = m-t =>t .原创 2020-06-14 11:14:49 · 134 阅读 · 0 评论 -
C. Anton and Fairy Tale(codeforces)
C. Anton and Fairy Tale问题:一个粮仓,早上存粮,晚上被麻雀偷吃。第一天存入n,n是粮仓的容量,之后每天存入m,如果某天存入的量和剩余的量大于n,那么只能留下n。第一天有一只麻雀偷吃,第二天又两只麻雀偷吃,以此类推。问:到第几天粮仓第一次为空。若n <= m;每天都会把粮仓填满(n),直到第n天,粮仓里的粮食会被n只麻雀第一次吃空。若n > m;直到第m天,粮仓一直是满的–(n),但从m+1天开始,粮仓的粮食每天都会减1,因为你n和m都可能会很大,所以直接爆搜一原创 2020-06-13 17:39:22 · 195 阅读 · 0 评论 -
A. Guest From the Past(codeforces)
A. Guest From the Past问题:你有n元钱,有两种牛奶,一种价值a元,一种价值b元,但回瓶子可以得到c元,两种牛奶不存在差异,问最多买多少瓶牛奶。我们想让买的牛奶数最多,那每瓶消耗的钱应该是最少的,所以我们就挑每种实际价格小的购买。但我们还得注意一些小问题:1.假如第二种牛奶每瓶单价较小,但n < b,那我们只能买第一种。2.因为c < d,如果已经满足上面的条件,那么n就一直在减少,终会出现上面的情况,我们就不能直接用n / (d - c)。3.如果上面的问题已经原创 2020-06-12 23:59:34 · 140 阅读 · 0 评论 -
B. Preparing for Merge Sort(codeforces)
B. Preparing for Merge Sort问题:用一个或几个递增的序列表示给定的数组。给定的数组每个元素都不相同。对于数组,必须从左往右依次取元素,添加到序列当中,如果不满足递增的元素则创建一个新的序列。求出每个序列举个例子 数组:[1, 3, 2, 5, 4]组成两个序列: [1, 3, 5],[2, 4]。这道题的解题关键在于:你得发现所有序列末尾元素为降序排列,对于添加每个元素x,我们可以在末尾组成的序列中二分搜索找到它应该在的位置(也就是第一个小于等于x的元素所在的序列,如果原创 2020-06-11 22:34:25 · 202 阅读 · 0 评论 -
Message(codeforces)
Message问题:给字符串A,字符串B。有三种操作:1,在字符串的前端或后端加上一个字符2,删掉前端或后端一个字符,改变字符串中间一个字符。求将一个A的子串变成B最少的操作数。我们要求A一个子串,和B的子串有着最大匹配说一下最大匹配:这个可能是和B的子串相同,也有可能是和B的子串在中间有几个位置不同其他都相同。我们再用B的长度减去最大匹配中相同的字符个数,得到答案。我见了两种解法。都写写吧。解法暴力动态规划暴力借鉴大佬博客 Orz两遍暴力,每次二重循环求一个串对另一个串的匹配A:abc原创 2020-06-10 23:36:06 · 283 阅读 · 0 评论 -
Another Problem on Strings (codeforces)
Another Problem on Strings问题:给出一个由 0 1 组成的字符串,问有k个1组成的字串有多少个。例子:k = 2,字符串:01010。有 101,0101,1010,01010;先讲一个小技巧(刚不久前学的,没想到用上了)计算 [某个子区间和为k]的区间 的个数,转化为计算 [区间和为k的区间] 是多少区间的子区间(有点抽象哈)来个例子:[8, 1, 2, 1, 8],求子区间和为4的区间个数。我们可以找到区间和为4的区间为[1, 2, 1],然后让这个区间(左边元原创 2020-06-10 21:39:53 · 218 阅读 · 0 评论 -
C. p-binary(codeforces)
C. p-binary问题:重新定义二进制,二进制加一个常数 p 作为一个新的权值,看是否可以组成给定的数n。例如:p = -9,n = 7(7 = 2^4 - 9),不多说,解释代码。#include<iostream>#include<cstdio>using namespace std;//找到x二进制表示有多少个1int come(int x) { if(x <= 0) return 0; int ans = 0; while(x) { if(原创 2020-06-09 21:39:16 · 171 阅读 · 0 评论