2016个人训练赛5
文章平均质量分 58
金金金金鑫
这个作者很懒,什么都没留下…
展开
-
Codeforces 155A I_love_%username%
题意: 给你n个数,问你每个数是不是比前面的数都大或者都小,若是答案+1。 思路: 对于输入得每一个数,直接枚举前面的数,进行比较。 #include const int MAX=1005; int n,a[MAX]; int main(){ scanf("%d",&n); int ans=0; for(int i=1;i<=n;i++){ scanf("%d",&a[i])原创 2016-07-20 18:38:53 · 553 阅读 · 0 评论 -
Codeforces 445A DZY Loves Chessboard
题意: 给你一张图,图中有.和-,现在要求在所有.上涂颜色,且相邻的.的颜色要不一样,问方案。 思路: 枚举每一个.,进行BFS涂色。 #include #include using namespace std; const int MAX=105; int n,m; int dir[][2]={1,0,-1,0,0,1,0,-1}; char mp[MAX][MAX]; struct原创 2016-07-20 19:08:24 · 209 阅读 · 0 评论 -
Codeforces 154C Double Profiles
题意: 有n个点,m条边,问有多少个点对满足除它们之外的其他所有的点对这两个点的连接情况是一样的。 思路: 对于每个合要求的点对来说,它们的连接情况是一样的,也就是连接的点是一样的。那么符合要求的点对只有两种情况,1是对称,2是3个点的环。我们只需要给每个点一个特定的值,若两个点相连,那么两边都加上对方的那个值,最后判断一下有几个值一样的,然后加上从里面选2个的方法数。 #include原创 2016-07-20 19:01:14 · 392 阅读 · 0 评论 -
Codeforces 154B Colliders
题意: 给出m个操作,+表示向机器里面加一个数,-表示从机器里面删除一个数,加数时如果里面已经含有和这个数不互质的数,那么这个数加不进去。现在判断每次操作是否成功或者失败。 思路: 因为这里的数在1~n范围内,所以可以先预处理出这些数的质因数,然后加入的时候判断是否已经存在了相同的质因数,若存在着不能加入。其他的操作用hash的方法判断下就可以了。 #include #include #i原创 2016-07-20 18:56:40 · 405 阅读 · 0 评论 -
Codeforces 154A Hometask
题意: 给你一串字符串,再给你k 思路: 既然k个两字符串中没有重复的串,那么你删除一些必要的字符后肯定不会造成新的不符合要求的串,所以只要统计下串中连续的不合法的字符的个数,取最小值就可以了。 #include #include #include using namespace std; const int MAX=1e5+5; char s[MAX]; int main(){ s原创 2016-07-20 18:53:04 · 332 阅读 · 0 评论 -
Codeforces 155B Combination
题意: 给你n张牌,每张牌有a[i]、b[i],分别表示可以获得的分数和可以获得的取牌次数,问在一开始只能取一次的情况下能获得的最大分数是多少。 思路: 由于这里的a[i]、b[i]都是正整数,那么当然取得牌越多分数越大,所以就有了贪心的策略,即先按b从大到小排,若b一样则a大的先排。 #include #include using namespace std; const int MA原创 2016-07-20 18:40:58 · 279 阅读 · 0 评论 -
Codeforces 445B DZY Loves Chemistry
题意: 给你n种元素,m种反应,每反应一次答案*2,问答案最大值为多少。 思路: n种元素,最多反应n-1次,能反映的元素归于统一集合,不管集合中的元素如何放置都能反应集合元素个数-1次,那么我们根据这个性质,利用并查集维护集合,最后统计下就可以了。 #include typedef __int64 LL; const int MAX=55; int n,m,p[MAX]; int F原创 2016-07-20 19:15:43 · 313 阅读 · 0 评论 -
Codeforces 444A DZY Loves Physics
题意: 给你一张n个点的无重边的无向图,并给出相应的点权和边权,定义答案为v为点值之和,e为边值之和,问如何取点能使答案最大(这里点取好了对应的边也就必须取,所以我们不必取边)。 思路: 想了半天如何取点,发现解决不了。那么我们换个思路,来选边。如果选择一条边,那么肯定能得到两个点的值,如果选择两条边,那么只能得到三个点的值,所以我们发现如果多选择一条边反而比选择少一点边的还不划算,所以我们原创 2016-07-20 19:17:18 · 235 阅读 · 0 评论 -
Codeforces 444C DZY Loves Colors
题意: 开始有1~n种颜色在1~n的区间上,现在有两种操作: 1 a b c表示将a~b区间的颜色涂为c,区间内的每个点会累加上值|new颜色-old颜色|。 2 a b求出a~b区间内每个点的值的和。 思路: 线段树+lazy标志。这里设置三个变量sum表示所求值的和,col表示当前节点上的颜色,lazy表示累加的值。 #include #include using namespac原创 2016-07-20 19:31:50 · 238 阅读 · 0 评论