Codeforces Round #629 (Div. 3) 解题报告

A

【题意】签到题

B

【题意】长度为n的字符串,由n-2个a和2个b组成,按照字典序排序,问第k个

【题解】读题细心,最开始以为是ab代表01,搞二进制转化,实际上上面是正确题意,直接算b的位置即可

C

【题意】长度为n的由0,1,2组成的序列,分成两个数字,让他们的最小值最大

【题解】所以我们只需要让他尽量平均分即可,0可以分成0和0,2可以分成1和1,所以我们只有当碰到1的时候开始特殊处理,所以我们把1给一个数,然后下来所有的1和2都分配给另外一个数,以此能够保证分配的平均

D

【题意】给一个长度为n的序列,表示一个由各种类型组成的圆圈,现在问要让两两相邻的种类不同的生物被染成不同颜色最少需要多少颜色

【题解】第一没看见那个图,然后当序列做了一个小时然后剩下10分钟也没想到正解所以GG

贪心,两两不同直接两种颜色交叉1,2,1,2就可以了,但是只有在偶数个的情况下才能成立。如果是奇数的话会导致最后一个和第一个颜色相同,有两种解决方法,一种是如果有两个颜色相同的话可以做一改变,如果没有的话只能添加第三种颜色进行分割。

E

【题意】给定一颗n个结点的树,给定q个序列,每个序列有ki个数,现询问这些数字是否存在一条路径经过这些点或者他们的父亲

【题解】原文是找一条路径,这些点在他上面或者离这条路径上的点距离为1,其实就是这条路径经过这些点或者他们的父亲,在路径上的点的父亲还是在这个路径上,于是这个题就变成了观察这些点是否在一条路径上。

原题是使用的dfs序进行判断点是否为这个序列中最深的结点的父亲来判断是否存在路径,因为dfs序自己就拥有判定父子的能力,而且能够判断两个是否在一条路径上的能力

使用LCA也可以进行判断,如果一个点和最深点的LCA是这个点这个点一定是最深点的父亲,但如果不是的话,判定完两个点的LCA之后应该怎么处理好像还没想明白,囧

F

【题意】一个n个正整数的序列,有两种操作,一种是将最小的数字加1,一种是将最大的数字减1,现求需要获得k个相等的数字最少需要多少操作

【题解】利用前缀和枚举如果要到达每个序列上每个数字所需要的操作,至于为什么是序列上的数我觉得应该是可证的,先把左面的全部移过来,因为如果要获得这个数字前面的所有数字一定是需要全部加完的,右边同理。然后再先把右边移过来,然后把左边移过来。

  具体移的过程,先把所有的数字移到val-1处,然后再移对应的本次需要的

总结:贪心还是不大会,坚持补题

原文地址:https://www.cnblogs.com/rentu/p/12640989.html

时间: 2024-07-30 16:42:27

Codeforces Round #629 (Div. 3) 解题报告的相关文章

Codeforces Round #259 (Div. 2) 解题报告

终于重上DIV1了.... A:在正方形中输出一个菱形 解题代码: 1 // File Name: a.cpp 2 // Author: darkdream 3 // Created Time: 2014年08月01日 星期五 23时27分55秒 4 5 #include<vector> 6 #include<set> 7 #include<deque> 8 #include<stack> 9 #include<bitset> 10 #inclu

Codeforces Round #262 (Div. 2)解题报告

详见:http://robotcator.logdown.com/posts/221514-codeforces-round-262-div-2 1:A. Vasya and Socks   http://codeforces.com/contest/460/problem/A 有n双袜子,每天穿一双然后扔掉,每隔m天买一双新袜子,问最多少天后没有袜子穿.. 简单思维题:以前不注重这方面的训练,结果做了比较久,这种题自己边模拟边想.不过要多考虑trick ```c++ int main(){ i

Codeforces Round #616 (Div. 2)解题报告

Codeforces Round #616 (Div. 2)解题报告 A. Even But Not Even 找两个奇数就行了. #include<bits/stdc++.h> using namespace std; void solve() { int n; string s; cin >> n >> s; string ans = ""; for(int i = 0; i < n; i++) { if(int(s[i] - '0')%2

Codeforces Round #479 (Div. 3)解题报告

题目链接: http://codeforces.com/contest/977 A. Wrong Subtraction 题意 给定一个数x,求n次操作输出.操作规则:10的倍数则除10,否则减1 直接写,手速题,没啥好说的 B. Two-gram 题意 求出现次数最多的连续两个字符 还是签到题,我居然很麻烦地用了map,= =算了,思路畅通都无所谓了 #include <iostream> #include<stdio.h> #include<algorithm> #

Codeforces Round #515 (Div. 3) 解题报告(A~E)

题目链接:http://codeforces.com/contest/1066 A题: 题意:Vova想坐火车从1点到L点,在路上v的整数倍的点上分布着灯笼,而在路上从l到r处停着别的火车,它挡着Vova的视线使他看不到灯笼.给定L,v,l,r求Vova能看到的灯笼数. 分析:从1到x上所有的灯笼数量为x/v个.则路上所有的灯笼数为L/v个,被挡住的则为 r/v - (l-1)/v 个,相减即为答案. #include<iostream> #include<cstdio> #inc

Codeforces Round #401 (Div. 2)解题报告

A - Shell Game 1 #include <iostream> 2 #include<bits/stdc++.h> 3 #include <stack> 4 #include <queue> 5 #include <map> 6 #include <set> 7 #include <cstdio> 8 #include <cstring> 9 #include <algorithm> 10

Codeforces Round #390 (Div. 2) 解题报告

时隔一个月重返coding…… 期末复习了一个月也不亏 倒是都过了…… 就是计组61有点亏 复变68也太低了 其他都还好…… 假期做的第一场cf 三道题 还可以…… 最后room第三 standing383简直人生巅峰…… 看楼上楼下都是两道题的 如果A题不错那么多估计能进前300了吧…… 这场倒是把之前两场的分加回来了 开头不错 这个假期争取紫名~ A.Lesha and array splitting 把给定的数组分割成几个区间 要求各个区间和不能为0 一开始没注意到分割之后的区间重新合成之

Codeforces Round #394 (Div. 2) 解题报告

开始补题,今天下午virtual参赛,过了ABC,D题因为一点小错误而没能在比赛时间中AC,时间到了之后几分钟就发现了问题所在,略有遗憾.之后一直冥思苦想E题,在提示下终于明白,真的是给这样组合题画风的题目跪了,只能说继续加油,扩展思路吧. A题 题目地址 只有奇偶数个数相差小于等于1时可以,需要特判不能使二者均为0的情况. 参考代码 1 #include<stdio.h> 2 #include<bits/stdc++.h> 3 #include <iostream>

Codeforces Round #279 (Div. 2) 解题报告

A - Team Olympiad 贪心水题..都从第一个开始取即可. 代码如下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #include <map