Codeforces
文章平均质量分 76
cadongllas
这个作者很懒,什么都没留下…
展开
-
#343Div2-629C Famil Door and Brackets动态规划
oi退役之后正式开启acm之路,纠结之下感觉写题解还是挺重要的。。希望养成这个好习惯吧。。嗯这是大学的第一篇题解比赛的时候想到了是dp但是还是不太对,把问题想复杂了,其实不用管那么多情况,直接dp用乘法原理搞就没问题。具体做法:先预处理,f[i][j]表示长度是i的括号列,有j个未匹配的方案数这j个是左或者右括号其实并不重要,因为题目规定了任何时候左括号必须比右括号多,所以显然原创 2016-03-16 21:28:26 · 306 阅读 · 0 评论 -
codeforces 189C Permutations
给两个不同的1-n的排列a和b,你每次可以把a数组最后一位的数字插入到任何位置,求从a转换到b的最小操作次数首先将a相对于b排序,然后找第一个 i 满足a[i] > a[i + 1],然后答案就是n - i#include #include #include #include #define rep(i, j, k) for(ll i = j; i <= k; i++)原创 2016-09-07 00:31:38 · 341 阅读 · 0 评论 -
codeforces 189D AlgoRace
有m种车,给定每种车从城市i到城市j的时间话费cost[i][j],有 r 个询问,每次询问从 i 到 j ,最多换 k 次车类型的最小时间花费用cost[i][j][k]表示用第 i 种车,从j 走到 k的最小花费,读入花费矩阵之后,注意用floyd预处理,保证cost[i][j][k]是最优。然后用f[i][j][k] 表示换i 次车从 j 到k 的最优解,然后每次询问直接输出就行原创 2016-09-07 00:52:18 · 294 阅读 · 0 评论 -
codeforces 190C STL 字符串处理+栈思想
给一个pair的嵌套声明去掉标点的字符串,然后让你加上标点使得新的字符串符合语法规则整体递归的思想,注意要将pair 作为一个整体 #include #include #include #include #include #include #include #include using namespa原创 2016-09-07 01:09:08 · 463 阅读 · 0 评论 -
codeforces 192C Dynasty Puzzles 字符串动态规划
给定n个字符串,问通过互相连接所能组成最长的字符串长度是多少,连接时必须满足前一个字符串的末尾和后一个字符串的首字符相同,而且最终的得到的字符串的首尾必须相同用f[i][j][k]表示前 i 个字符串首尾字符分别是j,k时的最优解,直接转移就可以。唯一值得注意的就是同样的状态,有可能随着转移,其最优解会发生改变。哦还要用滚动数组#include #include #incl原创 2016-09-07 11:02:06 · 219 阅读 · 0 评论 -
codeforces 192D Demonstration
题意:相当难读的题,政府有n块场地,示威者要申请m天的场地进行示威,场地是m块不同的,政府有k 元,每当示威者进行一次申请,政府可以付出对应的费用拒绝,至少要保证把最坏的 (也就是第n块场地)给示威者,场地好坏从1-n递减,问示威者最好能得到哪块场地直接贪心就行,先判断钱能否拒绝所有的场地,具体看代码#include #include #include #include原创 2016-09-07 11:03:20 · 400 阅读 · 0 评论 -
codeforces 194C Cutting Figure
给一个n乘m的方格,每个格子是障碍或者空地,空地之间是四联通的,问最少在几个空格子放上障碍,可以使得原图不联通、首先自己想想可以得到,答案不是1就是2,然后问题就简化为了检验原图是否存在割点的问题,直接dfs就可以#include using namespace std;typedef double ld;typedef long long int64;typedef原创 2016-09-07 11:08:26 · 324 阅读 · 0 评论 -
codeforces 195C Try and Catch 字符串处理
字符串题目,题目给出一系列try - catch (xxx, "..."),表示在这个区间中找输出为xxx的部分,如果找到则输出相应的内容,问最终的屏幕输出用类似栈的思想,这样就只需要处理跟结果有关的字符串,然后就是注意空格啥的#include #include #include #include #include #include #define rep(i, j原创 2016-09-07 11:15:19 · 344 阅读 · 0 评论 -
codeforces 197C Lexicographically Maximum Subsequence
给一个只含小写字符的字符串,求其字典序最大的子集并输出先后按字符的字典序降序和其对应下标升序排序,然后贪心输出即可#include #include #include #include #include #include #define rep(i, j, k) for(ll i = j; i <= k; i++)#define ll long long#def原创 2016-09-07 11:18:55 · 534 阅读 · 0 评论 -
codeforces 199C About Bacteria
开始时只有1个 细菌,然后之后的每一秒过去,其细菌数都会变为原来的k 倍加上b,就这样持续增长n秒。问如果最开始有 t 个细菌而不是一个,要增长到原来n秒后的水平(大于等于),至少需要多少秒因为kbn都是小于1e6,所以直接做数字会非常大,但是我们发现其实只要到了某一时刻,从1开始增长的细菌恰好大于等于t,之后的剧情就会完全类似,所以只需要从1开始求,求其刚达到t 的时间即可#原创 2016-09-07 11:32:46 · 274 阅读 · 0 评论 -
codeforces 199D Jumping on Walls
有左右两堵墙,高度都是n,每米为一个单位,每个单位是障碍后者是空地,你从左面的第一米开始爬,每秒可以上爬一米,或下爬一米,或者跳到对面墙k米之上,如果爬到n米或者更高就算是登顶,问登顶的最短时间。还有一个限制就是,洪水每秒一米往上,不能到洪水之下最好的办法就是bfs,拓展出每秒所能达到的所有位置,因为bfs是按照时间顺序的,所以之前记录下达到每个格子的最短时间,一定是最优解,这题我用d原创 2016-09-07 11:34:09 · 296 阅读 · 0 评论 -
codeforces 200C Football Championship
字符串题,基于cpp模板的声明,先声明了n个函数原型,其中T代替任何数据类型,然后给了m种变量的声明,又给了k 个函数的声明,用的是之前那m个变量,问每个函数分别能匹配多少个函数原型先是字符串处理,然后暴力循环,用变量类型替换变量名,直接判断是否匹配然后统计答案即可#include #include #include #include #include #includ原创 2016-09-07 11:36:28 · 454 阅读 · 0 评论 -
codeforces 190D Non-Secret Cypher 双指针
给定长度为n的数组a,给定k,问有多少个子数组,其中至少包含着有k个相同的数字双指针经典题目,注意先要离散,然后注意m是1的情况#include #include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)#define maxn 1000009#define原创 2016-09-07 17:39:34 · 625 阅读 · 0 评论 -
codeforces 200D Programming Language 字符串处理
字符串题,基于cpp模板的声明,先声明了n个函数原型,其中T代替任何数据类型,然后给了m种变量的声明,又给了k 个函数的声明,用的是之前那m个变量,问每个函数分别能匹配多少个函数原型先是字符串处理,然后暴力循环,用变量类型替换变量名,直接判断是否匹配然后统计答案即可#include #include #include #include #include #include #原创 2016-09-07 20:17:22 · 348 阅读 · 0 评论 -
codeforces 166D Shoe Store 二分图 匈牙利算法
题意:有n双鞋,给定其分别的售价和尺码,保证所有鞋的尺码是不用的,有m个人来买鞋,给定其脚的大小以及手里的钱,他可以买跟脚号码相等或者大一号的鞋,同时需要保证手里的钱足够,问最多卖出的营业额是多少因为每双鞋的尺码是不一样的,所以每个人最多有两种购买的可能,一边是顾客,一边是鞋,用map建成二分图,然后用匈牙利求解即可但是为了保证营业额最大,首先要将鞋的售价降序排序,这样可以保证最优原创 2016-09-08 12:53:38 · 732 阅读 · 0 评论 -
codeforces 186C Plant
题意:每次把一个相反的(正倒相反)的三角形放到每个三角形中切割原来的图形,问n次切割后有多少个小三角形?公式题,忘记特判0的情况wa了很多次!!!以后一定要注意边界情况#include #include #include #include #include #include #define rep(i, j, k) for(int i = j; i <= k;原创 2016-09-07 00:27:23 · 298 阅读 · 0 评论 -
codeforces 180F Mathematical Analysis Rocks!
#116 div2给一个长度为n的序列a表示起初第i个人拿着第a[i]个人的作业,再给一个同样长度的序列b表示最终i拿着b[i]的作业,求序列p。序列p是一个1-n的排列,表示每过一天后,i 要把他手中的书给p[i]直接将(ai,bi)二元组排序,然后输出排序后的b数组即可#include #include #include #include #include原创 2016-09-07 00:19:01 · 594 阅读 · 0 评论 -
codeforces 180E Cubes 双指针经典题
#116 div2一个长度为n的序列,每个格子被涂成了m种颜色中的一种,让你删除不超过k个格子,使得得到的新序列中,同样颜色的子序列长度最大,并输出这个长度首先预处理,用vector把同种颜色的格子的下标记录下来,然后用双指针枚举相同颜色的前后区间,通过下标的加减来计算不同颜色的格子的数目,如果小于等于k那就更新答案#include #include #includ原创 2016-09-07 00:15:58 · 420 阅读 · 0 评论 -
codeforces 658C Bear and Forgotten Tree 3构造-多么痛的领悟
其实是很简单的题目,但是一直wa了一晚上,所以与其说这是一篇题解,不如说是一篇反思首先我构思了一个基本正确的做法, 这时候比赛只进行了40分钟左右,wa在了第五组,然后就一直在盯着程序看,而不是思考自己最初的想法是否正确,这是十分致命的,也导致了这次cf的失败。。同时也感谢这个题暴露了我这个大问题。。总之经验就是,当wa了以后,确定自己程序执行正确之后如果还是wa,那么应该原创 2016-03-29 16:23:22 · 412 阅读 · 0 评论 -
#342Div2-625D Babaei and Birthday Cake线段树优化DP
首先要明白一个蛋糕在另一个之上当且仅当序号和体积都比原来的大然后一维显然可以用sort解决,另一维暴力是n^2显然过不了,考虑优化不妨按体积排序,然后记录对应的在原序列中的序号,然后扫一遍,每次处理完当前之后,便把这个体积插入线段树中,对应的节点就是在原序列中对应的节点,然后每次用logn做大查询,就是简单的线段树优化DP的问题。当然,比如树状数组等同样支持区间Max的也能做到#inc原创 2016-03-17 16:48:38 · 323 阅读 · 0 评论 -
CF645E-Intellectual Inquiry 贪心
用f[i]表示以i为结尾的子串的数目,同时记录字母i最后一次出现时的下标last[i]那么我们为了达到子串数目最大,考虑下一个字母如何填写。首先,如果附属字母i,那么此时收到影响的只有f[i],f数组中的其他数值并不受影响其次,当前加入新的字母的增量,就是所有f的和最重要的是,利用子串数目的递增性质,也就是f数组中,随着i的增加,f的数值同时也是增加的,这就意味着最早出现的字母必然原创 2016-03-21 19:54:05 · 436 阅读 · 0 评论 -
codeforces 197D Infinite Maze dfs
有一个无限的迷宫,由无数个n*m的小单元组成,类似于拼图,给定这个小单元,每个位置是空地或者障碍,再给定起点,问能否从起点走到无穷远的位置刚开始的时候没有想清楚,实际上问题的本质在于,如果一个格子能从他相邻的两个不同的格子进入,那么一定可以走到无穷远的位置。想明白这个就挺好写了,先从起点开始dfs,对于每个没有走到的位置标记是从哪个格子走到他的,然后如果从不同的格子走到了一个已经标原创 2016-09-09 14:17:17 · 560 阅读 · 0 评论 -
codeforces 696B 树形dp+概率
题意:访问一颗树,在节点上记录访问时间,每次对儿子节点的访问是随机的,问每个节点被访问时间的期望在每个子树中,可以发现每个节点cur ,dp[cur]=dp[fa]+f(cur);f这个函数可以发现是把fa当根节点,得到的每个子节点的期望值,这个值跟这棵子树的节点数有关,答案是(num[fa]-num[cur]-1)/2+1#include #include #incl原创 2016-09-03 11:33:39 · 265 阅读 · 0 评论 -
codeforces 696c 概率+快速幂
题目:三个杯子,物品一开始在中间的杯子里,在n此交换后,问物品在中间的杯子里的概率设Pn是n轮操作后中间杯子有钥匙的概率,则第n-1轮的时候,中间杯子里必须没钥匙,且有1/2的概率选到边上那个有钥匙的杯子。故:Pn=(1−Pn−1)/2我们可以用快速幂取模算法求出2^n mod (1e9+7),那么x可以通过减1再乘以3的乘法逆元求得,y可以通过乘以2的乘法逆元求得#i原创 2016-09-03 11:44:30 · 348 阅读 · 0 评论 -
codeforces 691A 模拟
题目:给一串0和1,要求有且只有一个0,如果只有一个数,则必须为1直接模拟就可以#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)using namespace std;int n, a[1009];int main (){ cin >> n; r原创 2016-09-03 11:47:23 · 282 阅读 · 0 评论 -
codeforces 691B 水题
题意:问给定的字符串是否是镜面对称#include #include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)using namespace std;bool fuck (char ch){ return ch == 'o' || ch == 'v' ||原创 2016-09-03 11:56:00 · 217 阅读 · 0 评论 -
codeforces 691D 并查集
题意:给出一个含n个元素的序列,再给出m个可以无限次互相交换位置的下标,求出交换以后让整个序列的字典序最大用并查集分出可以交换位置的下标集合,也就是将可以交换的下标集合分类,然后同一类就倒序输出,这样可以得到字典序最大的解#include #include #include #include #include #define rep(i, j, k) for(int原创 2016-09-03 11:57:51 · 372 阅读 · 0 评论 -
codeforces 691F Couple Cover 暴力预处理
题意:对于长度为n的序列,m个询问,每次学问一个数。让你回答序列中乘积不小于它的数对有多少对,n预处理当前序列中不大于当前值的数对有多少,然后用总数减去他的前一个就是答案了#include #include #include #include #define MAX 3000010using namespace std;long long n;long lon原创 2016-09-03 13:09:07 · 364 阅读 · 0 评论 -
codeforces 165C Another Problem on Strings 双指针
题意:求对于给定01字符串,有多少个子串,其恰好包含了k个1双指针,把每个1都找出来,统计这个1之后有多少个0然后用乘法原理计算#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++) using namespace std; typedef long原创 2016-09-03 20:45:01 · 318 阅读 · 0 评论 -
codeforces 166C Median 中位数
#113 div2题意:给n个数的序列,问最少添加多少个数字,使得序列的中位数是m?暴力排序,首先注意如果序列里没有m那么添加一个m是必须的,然后就是对于每个m,判断其前后分别有多少个数字,通过计算要加几个数字来把当前数字推到中位数位置#include #include #include #include #define rep(i, j, k) for (原创 2016-09-06 23:48:46 · 356 阅读 · 0 评论 -
codeforces 166E Tetrahedron 数学题
题意:一个蚂蚁在正四面体的一个角,每秒都要移动一下去另外一个点,问n秒后又回到起点的方案数设f[i]是 i 秒后走到abc的方案数,g[i]表示 i 秒后走到d的方案数,所以g[i] = f[i - 1] * 3, f[i] = 2 * f[i- 1] + g[i - 1]#include #include #include #include #define rep(原创 2016-09-07 00:02:42 · 347 阅读 · 0 评论 -
codeforces 180C Letter
给一个包含大小写字符的字符串,让你每次将一个字符的大小写转换,问最少操作几次才能使得字符串是一些大写字母在前+一些小写字符在后的情况首先预处理出f[i]表示前i个字符中,小写字符的数目,然后o(n)枚举大小写字符的分界线,同时计算并更新答案即可#include #include #include #include #define rep(i, j, k) for(int原创 2016-09-07 00:10:30 · 407 阅读 · 0 评论 -
codeforces 186D Mushroom Scientists 不等式
http://codeforces.com/blog/entry/4488 还是直接看cf的题解吧am-gm不等式。。又学到了#include #include using namespace std;int main(){ double a,b,c,S; cin>>S; cin>>a>>b>>c; if(a+b+c!=0) printf原创 2016-09-08 15:53:44 · 291 阅读 · 0 评论