2016个人训练赛10
文章平均质量分 58
金金金金鑫
这个作者很懒,什么都没留下…
展开
-
Codeforces 161A Dress'em in Vests!
题意: 给你n 思路: 先将a、b排个序,然后枚举a[i]和b[j]如果能适配就i++,j++,如果b[j] #include #include #include using namespace std; const int MAX=1e5+5; int n,m,x,y,ans[MAX]; struct Node{ int s,id; }a[MAX],b[MAX]; bool cm原创 2016-07-29 18:49:05 · 387 阅读 · 0 评论 -
Codeforces 161B Discounts
题意: 有n个商品和k辆购物车,给出每个商品的价钱c和类别t(1表示凳子,2表示铅笔),如果一辆购物车中有凳子,那么这辆购物车中最便宜的那个物品的价格能减少50%,问你如何放这些物品才能使总价钱最少。 思路: 贪心。每次做贪心题都开始怀疑人生了。。。。首先将所有凳子的价格从大到小排列,选取前k-1个凳子自己放一辆车(如果凳子数不够k-1那直接将凳子都放完),然后其他的商品都塞到剩下的购物车上原创 2016-07-29 18:56:23 · 383 阅读 · 0 评论 -
Codeforces 161D Distance in Tree
题意: 给你一颗n个点n-1条边的树,树边长均为1,问你树上有几对点对满足它们之间距离k。 思路: 树形dp。假设dp[i][j]为以从i到其距离为j的儿子的路径条数。我们在递归过程中,已经知道了它儿子的dp[v][0~k]的值,那么有:dp[u][1~k]+=dp[v][0~k-1]。并且可以得到从u点出发和以u为中间节点的方法数,即ans+=dp[v][k-1]和ans+=dp[v][0原创 2016-07-29 19:03:18 · 284 阅读 · 0 评论 -
Codeforces 204B Little Elephant and Cards
题意: 给你n张卡片,每张卡片都有正反a,b两种颜色,问你至少需要反转多少次才能使正面的一样的颜色超过一半以上。 思路: 统计下每种颜色的个数,只有当一种颜色的个数>=(n+1)/2时我们才考虑它,然后判定下该颜色在正面的个数是否>=(n+1)/2如果大于不需要反转,如果小于则需要反转至少 (n+1)/2-在正面的个数,然后不断维护这个的最小值。 #include #include #i原创 2016-07-29 19:18:20 · 496 阅读 · 0 评论 -
Codeforces 50B Choosing Symbol Pairs
题意: 给你一串字符串s,问你有多少个点对(x,y)满足s[x]=s[y],(x,y)和(y,x)算不同种。 思路: 统计每个字符出现的次数,然后枚举一遍加加加就好了。 #include #include using namespace std; typedef __int64 LL; const int MAX=1e5+5; int n; map mp; char s[MAX]; i原创 2016-07-29 19:21:45 · 491 阅读 · 0 评论 -
Codeforces 370B Berland Bingog
题意: 有n给人,每个人有m[i]张点数均不同的卡片,现在主持人没喊一个数持对应点数卡片的人能走卡片的步数,某人先走完自己手中全部卡片的获胜,问你在每个人都最有利的情况下每个人的获胜情况。 思路: 题意理解了半天。。。。。其实就是每个人都自己按照自己的卡片走,如果在自己走完之前,已经有人按照和自己一样的方式走完了,那么这个人必输。说白了就是对每个人去其他人的卡片堆中找是否有自己卡片点数的子串原创 2016-07-29 19:23:22 · 357 阅读 · 0 评论 -
Codeforces 242E XOR on Segment(线段树)
题意: 给你n 思路: 线段树。对于异或操作,我们想到二进制数,只有当x的二进制位为1时,被异或的数对应的二进制位取反。对于求和操作,我们如果知道二进制数每位1的个数,我们累加起来就能得到其和了。所以这里对于每一位都建立一颗树来保存1的个数,这里a[i]、x #include typedef __int64 LL; const int MAX=1e5+5; int sum[25][MAX原创 2016-07-29 19:29:56 · 363 阅读 · 0 评论 -
Codeforces 353D Queue(规律)
题意: 给你一个队列,M表示男生,F表示女生,每秒一个男生能和右边一个女生交换位置,问你需要多少秒所有女生都换到最左边。 思路: 对于一个女生。她至少需要换她前面所有男生个数次,如果她前面有个女生,那么她也至少需要前面那个女生的次数+1次,我们取最大值即可。 #include #include #include using namespace std; const int MAX=1e6原创 2016-07-29 19:59:24 · 514 阅读 · 0 评论 -
Codeforces 421D Bug in Code(思维)
题意: 给你n个点对(x,y)表示第i个人怀疑x和y,问你有多少个点对(x,y)被怀疑的人数总和超过p。 思路: 首先是统计下每个人被怀疑的次数,然后排个序,用两个指针从两头枚举,这样就能O(2*n)的时间统计出有多少个点对的和大于p。然后对于每个输入得点对,如果该点对对应的总和大于p(也就是说我们之前有计算过的),那么我们去判断去掉该重复的点后的和是否还大于p,如果不大于答案-1。 #i原创 2016-07-29 20:56:57 · 502 阅读 · 0 评论