Codeforces
题解感悟
Nengry
路漫漫其修远兮,吾将上下而求索。
展开
-
Codeforces Round #646 (Div. 2) A. Odd Selection (数学 思维)
A. Odd Selection题意判断是否能从 n 个数中选 m 个数,使其加起来为奇数。思路至少要有一个奇数,否则不可能。选了一个奇数之后,后面的 m-1 个数加起来应该为偶数。此时相当于从n-1个数中选m-1个数,使其加起来为偶数。向后面的 m-1 个数中加入成对的奇数或者单个偶数即可。加入奇数对时要注意m的奇偶性。代码#include<bits/stdc++.h>using namespace std;int t;int main(){ cin &原创 2020-06-01 14:45:53 · 211 阅读 · 0 评论 -
Codeforces Round #646 (Div. 2) B. Subsequence Hate (前缀和 思维)
B. Subsequence Hate题意给定一个 01 串,可以将 01 串中的 0 变为 1、1 变为 0,问至少需要变换多少次使得 01 串中不含有子序列 010 或 101 。思路不含有子序列 010 或 101 的字符串只有两种情况:00000000000001111111111111111000000000即:连续的 0 +连续的 1 或者 连续的 1 + 连续的 0统计将前 i 位都变成 0 或 1 所需要的操作次数,枚举 01 串中 0 的个数和 10 串中 1 的个数,原创 2020-06-01 14:13:25 · 295 阅读 · 0 评论 -
Codeforces Round #646 (Div. 2) E. Tree Shuffling (树上dfs统计)
E. Tree Shuffling题意有一棵 n 个结点,根为结点 1 的树,每个结点有一个选取代价 aia_iai,当前 bib_ibi(0或1),目标数字 cic_ici(0或1) 。每次可以选择以一个结点为根节点的子树中的 k 个结点,然后任意分配它们的 bib_ibi,消耗的代价为 k×arootk×a_{root}k×aroot ,判断能否把所有结点都变为目标数字以及最小代价是多少。思路如果 b 中 1 的个数和 c 中 1 的个数不相同,那么肯定不可以,否则一定可行。对于任意原创 2020-06-01 13:41:01 · 234 阅读 · 0 评论 -
Codeforces Round #644 (Div. 3) F. Spy-string (暴力)
F. Spy-string题意给定n个长度为m的字符串,找出一个长度也为m的字符串t,使得字符串 t 与给定的 n 个字符串中的每一个最多只有一个字符不同。答案不存在,输出-1,否则输出t。思路如果答案存在,那根据题意,t与给定的任一个字符串最多只有一个字符不同,那么我们对给定的第一个字符串进行修改,每次只改一个字符,对所有的字符串判断是否满足条件,满足则找到。代码#include <bits/stdc++.h>using namespace std;int t;int原创 2020-05-25 16:42:50 · 201 阅读 · 0 评论 -
Codeforces Round #644 (Div. 3) G. A/B Matrix (矩阵构造)
G. A/B Matrix题意找出一个 n*m 的矩阵,要求每一行严格存在 a 个 1,每一列严格存在 b 个 1,其余部分均为 0。思路矩阵中必须有n∗a=m∗bn*a=m*bn∗a=m∗b个1,否则不能满足题意。考虑每一行,每一行我们都要输出a个1,以及这一行剩下的0,让输出的1连续,下一行首个1的列位置接在上一行最后一个1的那一列之后。代码#include <bits/stdc++.h>using namespace std;int t;int n,m,a,b;原创 2020-05-25 14:26:48 · 402 阅读 · 0 评论 -
Codeforces Round #642 (Div. 3) F. Decreasing Heights (dp)
F. Decreasing Heights题意给定一个n*m的地图,地图中每一个格子都有一个高度,要你从[1,1]走到[n,m],你只能向下或者向右走,同时,你要去的那个格子里的高度必须比当前格子的高度高1。你可以在走之前执行任意数量的一种操作:选择任意一个格子,使它的高度减一。问从[1,1]走到[n,m]所需执行的最少操作次数是多少。思路如果我们能确定[1,1]处的值,那么直接dp就好,关键在于[1,1]处的值是变化的,所以我们想办法枚举[1,1]处的值。如果我们令[1,1]处的值为0,假设任一原创 2020-05-16 09:21:13 · 314 阅读 · 1 评论 -
Codeforces Round #642 (Div. 3) E. K-periodic Garland (dp or 贪心)
E. K-periodic Garland题意给定一个01串,要求这个串中所有两个相邻1之间的距离必须为k(r−l==k)k(r-l==k)k(r−l==k),求最少的操作次数。思路1定义dp[i][0]为前i个合法,并且第i个为0时的最少操作次数。定义dp[i][1]为前i个合法,并且第i个为1时的最少操作次数。那么有,dp[i][0]=min(dp[i−1][0],dp[i−1][1])+(s[i]==′1′)dp[i][0] = min(dp[i-1][0],dp[i-1][1])+(s原创 2020-05-15 14:50:13 · 443 阅读 · 0 评论 -
Codeforces Round #636 (Div. 3) D Constant Palindrome Sum【1343D】 (前缀和)
Constant Palindrome Sum题意原创 2020-04-22 23:50:18 · 116 阅读 · 0 评论 -
Codeforces Round #632 (Div. 2) B Kind Anton 【1333B】(思维题)
Kind Anton题意给定一个数组 a ,a 中只含有 {-1,0,1} 这三个数,可以执行以下操作:选一个(i,j)(i,j)(i,j),1≤i<j≤n1≤i<j≤n1≤i<j≤n,可以被选多次将 a[j]a[j]a[j] 变为 a[j]+a[i]a[j]+a[i]a[j]+a[i]然后给定一个数组 b ,问 a 能否根据以上操作变成 b 。思路对于 a 中...原创 2020-04-09 07:51:24 · 136 阅读 · 0 评论 -
Codeforces Round #632 (Div. 2) A Little Artem 【1333A】(思维题)
Little Artem题意要求给一个 n∗mn*mn∗m 的板子中的每一个小格子涂上黑或者白两种颜色,对于一个格子而言,如果与它相邻的格子中有和它异色的,那么可以称这个格子是有效的,需要输出一种涂法,使得有效的 黑色格子数=白色格子数+1,即 B = W + 1 。给出的n,m保证一定存在一种涂法满足上述条件。思路按照CF常年第一题的特性,一定有什么及其简单的方法可以满足上面这个条件。...原创 2020-04-09 00:50:32 · 133 阅读 · 0 评论 -
Codeforces Round #630 (Div. 2) C K-Complete Word 【1332C】
K-Complete Word题意给定一个字符串,求让给定字符串满足下列条件需要修改的字符的最小数量。其中n为字符串长度,k可以整除n。条件:s is a palindrome, i.e. si=sn+1−is_i=s_{n+1−i}si=sn+1−i for all 1≤i≤n1≤i≤n1≤i≤n;s has a period of k, i.e. si=sk+is_i=s_{...原创 2020-04-04 23:43:20 · 119 阅读 · 0 评论 -
Codeforces Round #630 (Div. 2) B Composite Coloring 【1332B】
Composite Coloring题意给定一堆合数,要对合数进行染色,要求不互质的两个数可以用同一种颜色,所用颜色不能超过11种。对于每一组数据,输出一种染色方案,不要求以最少或最多的颜色。思路平方小于1000的质数总共有这11个:2,3,5,7,11,13,17,19,23,29,31。一个合数的最小质因子一定小于该合数的根号,那么1000以内的数的因子里都或多或少包含着这一个或几...原创 2020-04-04 19:41:43 · 274 阅读 · 0 评论 -
Codeforces Round #630 (Div. 2) A Exercising Walk 【1332A】
Exercising Walk题意给定一个范围和一个初始坐标,可以往四个方向移动,规定每个方向的移动次数,没有顺序限制,问能不能在不出范围的情况下完成所有移动。思路只要不去一步一步模拟应该怎么做都能过,这里利用互补直接将左右和上下的移动抵消掉。代码#include<iostream>#include<cstdio>#include<cstdlib>...原创 2020-04-04 18:35:41 · 145 阅读 · 0 评论 -
Codeforces Round #630 (Div. 2) D Walk on Matrix 【1332D】
Walk on Matrix题意有一个迷宫,要从左上角可以走到右下角。每次走到一个格子,都可以得到当前的分数&当前格子数字之后的分数。初始拿着的分数是:左上角的格子的数。要求到最终能得到的分数最大值是多少。有一位参赛者写了一个这样的dpdp[i][j] = 0; //all i jdp[0][1] = a[1][1];for i = 1->n for j = 1-&...原创 2020-04-04 16:49:30 · 139 阅读 · 0 评论