SRM 407(1-250pt, 1-500pt)】的更多相关文章

DIV1 250pt 题意:每个员工可以有几个直系上司,也可以有几个直系下属.没有直系下属的人工资为1,有直系下属的人工资为所有直系下属工资之和.求所有人工资之和.人数 <= 50. 解法:直接dfs一遍求出所有人工资就好.(官方题解说该问题满足拓补序,用dfs做拓补序再求) tag:dfs // BEGIN CUT HERE /* * Author: plum rain * score : */ /* */ // END CUT HERE #line 11 "CorporationSal…
SRM 475 DIV1 300pt 题意:玩游戏.给一个棋盘,它有1×n(1行n列,每列标号分别为0,1,2..n-1)的格子,每个格子里面可以放一个棋子,并且给定一个只含三个字母WBR,长度为n的字符串,代表每个格子的颜色.在游戏开始时,r个棋子随机摆放在这n个格子里(每个棋子摆在每个格子里的概率相同),问游戏结束时,这些格子里所剩棋子数的期望.游戏的规则为(记这个棋盘的列数为size): 1.如果棋子在0格,则向右移动一格: 2.如果棋子在size-1或size-2格,则向左移动一格: 3…
SRM 468 DIV1 250pt 题意:给出字典,按照一定要求进行查找. 解法:模拟题,暴力即可. tag:water score: 0.... 这是第一次AC的代码: /* * Author: plum rain * score : 0 */ #line 11 "T9.cpp" #include <sstream> #include <stdexcept> #include <functional> #include <iomanip&g…
SRM 470 DIV1 250pt 题意:有n个房间排成一排,相邻两个房间之间有一扇关闭着的门(共n-1扇),每个门上都标有‘A’-‘P’的大写字母.给定一个数n,表示第n个房间.有两个人John和Gogo,两人轮流按下面的规则选择一个大写字母(‘A’-‘P’),每选择一次字母,标有该字母的门就打开了. 某次选择之后:若所有门全部打开,则平手游戏结束,输出0:n房间之前的门全部打开,则John胜游戏结束,输出两人总共选择了的颜色的数量:n房间后的门全部打开,则Gogo胜游戏结束,输出-1 ×…
SRM 593 DIV1 250pt 题意:有如下图所示的平面,每个六边形有坐标.将其中一些六边形染色,要求有边相邻的两个六边形不能染同一种颜色.给定哪些六边形需要染色,问最少需要多少种颜色. 解法:首先,需要0种颜色和需要1种颜色很容易判断,其次,最多需要3种颜色.易证. 也就是说,难以判断的就是需要2种颜色还是3种颜色.假定只需要染2种颜色,然后将需要染色的六边形染色,看是否会出现矛盾.用DFS染色. Ps:和官方题解一比,自己写的代码太麻烦了.... tag:染色 /* * Author:…
div1 250pt: 题意:... 解法:先假设空出来的位置是0,然后模拟一次看看是不是满足,如果不行的话,我们只需要关心最后栈顶的元素取值是不是受空白处的影响,于是还是模拟一下. // BEGIN CUT HERE // END CUT HERE #line 5 "Suminator.cpp" #include<cstdio> #include<cstring> #include<cstdlib> #include<ctime> #i…
div1 250pt: 题意:用RGB三种颜色的球摆N层的三角形,要求相邻的不同色,给出RGB的数量,问最多能摆几个 解法:三种颜色的数量要么是全一样,要么是两个一样,另外一个比他们多一个,于是可以分类讨论:对于数量全一样的,直接算;对于另外的,我们可以先不考虑多出来的那一个,也是正常放,然后看最后剩下的位置能不能放完所有多出来的那一个,这个可以二分. // BEGIN CUT HERE // END CUT HERE #line 5 "FoxPaintingBalls.cpp" #i…
div1 250pt 题意:一个长度最多50的字符串,每次操作可以交换相邻的两个字符,问,经过最多MaxSwaps次交换之后,最多能让多少个相同的字符连起来 解法:对于每种字符,枚举一个“集结点”,让其他相同的字符尽可能和它连起来. // BEGIN CUT HERE // END CUT HERE #line 5 "ColorfulChocolates.cpp" #include<cstdio> #include<cstring> #include<cs…
div1 250pt: 题意:有个机器人,从某一点出发,他只有碰到地形边缘或者碰到走过的点时才会改变运动方向,然后接着走,现在给出他的运动轨迹,判断他的运动是否合法,如果合法的话,那么整个地形的最小面积是多少. 解法:先随便设定一个起点,然后模拟机器人走的路线,先确定出来运动的大致范围,然后判断运动轨迹是否合法,也就是出了最后一步可以手动终止之外,看其他的时候,它转变方向是不是合法.... // BEGIN CUT HERE // END CUT HERE #line 5 "RotatingBo…
div1 250pt: 题意:100*100的01矩阵,找出来面积最大的“类似国际象棋棋盘”的子矩阵. 解法:枚举矩阵宽(水平方向)的起点和终点,然后利用尺取法来找到每个固定宽度下的最大矩阵,不断更新答案. // BEGIN CUT HERE // END CUT HERE #line 5 "TheMatrix.cpp" #include<cstdio> #include<sstream> #include<cstring> #include<…
SRM 501 DIV1 500pt SRM 502 DIV1 500pt SRM 508 DIV1 500pt SRM 509 DIV1 500pt SRM 511 DIV1 500pt SRM 514 DIV1 600pt…
DIV1 250pt 题意:电视目前停留在第100台,有一个遥控器,可以向上或向下换台(需要按键一次),也可以按一些数字,然后直接跳到该台(需要按键次数等于数字数,不需要按确定键).但是,这个遥控一些数字键是坏的不能按.问要换到x台最少需要按多少次.x <= 500000. 解法:直接搜索.可能用bfs会快点,但我更喜欢写dfs就用了. tag:search // BEGIN CUT HERE /* */ // END CUT HERE #line 7 "BrokenButtons.cpp…
DIV1 250pt 题意:有很多袋子,里面装有苹果和橘子(也可能没有),给出每个袋子里有多少个苹果,多少个橘子.如果每个袋子里含有水果的总数都不小于x个,则可以从每个袋子里都拿出x个水果(拿出苹果和橘子的总数为x),将所有拿出的水果混合成一份礼物,问可能混合出的礼物的种数. 最多50个袋子,每个袋子里的苹果和橘子的数量 <= 10^6. 解法:枚举即可,枚举从每个袋子里拿出的水果的数量x,然后求出,拿出总数是x的情况下,苹果最多能拿多少个,最少能拿多少个,相减即可. 至于怎么求最多和最少,由于…
DIV1 250pt 题意:给定一个vector<int>A,若能从里面选出一些数,使得他们按位或的值为x,则称x为吉利数.给定k,问最少要从A里面去掉多少个数,才能使k变为不吉利数. 解法:按位考虑.如果A中某元素A[i],将A[i]和k转化成二进制形式,如果某一位A[i]为1而k的为0,则一定不选选取掉A[i],把所有这样的A[i]全部从A中删掉.然后,维护ans,枚举所有k二进制为1的位,计A中有t个元素该位为1,则ans = min(ans, t). A.size() <= 50…
题目简述 给定一个H×W大小的矩阵,每个格子要么是1~9中的一个数,要么是".",要求你把“.”填成具体的数字(1~9),并且符合以下两个要求: 对于所有的整数r 和 c( 0 <= r <= H-n,0 <= c < W), 使得 F[r][c] + F[r+1][c] + ... + F[r+n-1][c] 是奇数. 对于所有的整数 r 和c(0 <= r < H,0 <= c <= W-m), 使得 F[r][c] + F[r][c…
题目简述 给定n个数,两个人轮流取数,和之前两个人的取的数或起来,谁不能取数或者谁取到的数和之前的数或值为511谁输,问谁能够赢? 题解 刚开始的想法是直接搜,不过需要记录取过的值的状态,2^50显然超时...对于当前或值cur,或上一个数num,只有两种情况,要么是 cur|num==cur, 对于这种数,只是把这个状态直接给下一个玩家,起到延缓一步的作用,他们的选取顺序对局面没有影响,可以先全部轮流取掉,如果这种数的个数大于当前已经取的数的数量,那么我们还可以选择这种数,如果选择这个数可以导…
题目简述 给定一个大小为 n的序列(n<=10)R,要求你计算序列A0, A1, ..., AN-1的数量,要求A序列满足A0 + A1 + ... + AN-1 = A0 | A1 | ... | AN-1(0<=Ai<=R[i]) 题解 把n个数看成二进制,如果要求n个数的和等于n个数的或值,那么对于n个数的每一位,最多只可能有一个1,因为超过一个一就会产生进位. 由于第i个数如果当前位放置的是0,但 R[i]的当前位是1,那么之后的位置上就可以随意放了,没有限制,所以我们可以用DP…
题目简述 给定一个字符串,可以对其进行修改,删除,增加操作,相应的操作有对应的花费,要求你用最小的花费把字符串变为回文串 题目做法 先搞一遍floyed把各种操作的最小花费求出来,然后就是类似编辑距离的DP了,这题坑了好久...中间结果会爆int,我设置的inf=0x3f3f3f3f,中间结果有inf+inf+inf..刚开始dp数组是int型的...这里搞了好几才发现这问题...西安现场赛也遇到这个问题了...然后也是浪费了将近100分钟的时间...导致后面做题的时间不够了... 代码: #d…
题目简述 给定比赛时间T和n个题目,你可以在任意时间提交题目,每个题目有一个初始分数maxPoints[i],每个单位时间题目的分数将会减少pointsPerMinute[i],即如果在时间t解决了第i个题目,那么获得的分数为maxPoints[i] - t * pointsPerMinute[i],另外做每个题目需要requiredTime[i]的时间,求能够获得的最大分数是多少? 题解 由于问题解决的先后,获得的分数是不一样的,因为我们首先得确定做题的选择顺序,根据相邻交换法,对于问题a和问…
题目简述 给定一个长度为n的序列,每个数值的范围为[-1,40],-1可以替换成0~40之间的数,要求你求出符合以下条件的序列有多少个? 1.每个数都是0~40之间的数 2.对于每一个数A[i],都需要小于等于前面所有数的算术平均值,及 对于 i, 1 <= i < N, 需要满足 A[i] <= (A[0] + A[1] + ... + A[i-1]) / i 3.序列中不存在三个连续的数刚好是严格递减的 题目做法 dp[i][j][k][f]表示当前第i个数和为j,第i-1个数为k,…
嗯....还是应该坚持写题解的好习惯啊... DIV1 250pt 这难度是回到srm 300+的250了嘛...略 // BEGIN CUT HERE /* * Author: plum rain * score : */ /* */ // END CUT HERE #line 11 "MagicalStringDiv1.cpp" #include <sstream> #include <stdexcept> #include <functional&g…
rating又掉了...变灰色了%>_<%.250pt很简单,一眼看上去是个背包,没有多想立马写了个01背包,后面发现其实就是个简单的排序...因为只是需要求数量而已.500pt被我写残了,fst了,有一组极限数据超时了,我脑残的用了O(n)时间复杂度的质因数分解 10^9必定超时啊....还是没想清楚就写了,真的得记住:想得多写得少,并且正确率也会提高很多.950pt思路是有了,没有时间写了,当时想用Trie统计下每个单词路径上经过了有多少个单词,然后再进行相应的计算,其实没必要用Trie,…
前段时间终于配置好了TopCoder的环境,所以就拿这场的DIV2练习了一下 1. 250pt FoxAndSightseeing 题意 给你n个城市的位置,他们在同一直线上,要求你跳过其中某一个城市,按顺序依次访问其他的城市,求距离的最小值 题解 由于数据规模为n<=50,所以直接枚举就好 代码: class FoxAndSightseeing { public: int getMin(vector <int> position) { int ans=INF; ;i<positi…
SRM 144 DIV 1 500pt tag:组合 题意:彩票中奖.给定n, m,从1-n中选择m个数组成数列a1, a2, a3...am.对于数列{am}分别满足以下条件的概率: (1)数列所有元素不相同且非严格递增: (2)数列元素可以相同,可以递减: (3)数列元素不相同,可以递减: (4)数列元素可以相同,且非严格递增. 解法:所有四种情况均可以用排列组合公式直接解决,要用大数.最难的是最后一种情况,我也是最后一种情况公式写错了. 并且,最后一种情况公式的推导过程也可以看一看官方题解…
DIV1 250pt 题意:将一个数表示成质因子相乘的形式,若乘式所含数字的个数为质数,则称A为underprime.比如12 = 2*2*3,则含3个数字,是underprime.求A, B之间underprime的个数.A, B <= 10^5. 解法:暴力枚举A,B之间所有数,求出其乘式所含数字的个数, 判断是不是质数. tag:brute-force // BEGIN CUT HERE /* */ // END CUT HERE #line 7 "Underprimes.cpp&q…
DIV1 250pt 题意:小球从一段折线斜坡上滚下来,告诉所用时间,求重力加速度. 解法:二分答案模拟即可. tag:二分,simulation // BEGIN CUT HERE /* * Author: plum rain * score : */ /* */ // END CUT HERE #line 11 "IncredibleMachine.cpp" #include <sstream> #include <stdexcept> #include &…
DIV1 250pt 题意:对于图G,有一些点和边,点中有一些点称为特殊点.问在所有特殊点最终不能处于同一个联通块的条件下,最多能给在图G中添加多少条边. 解法:首先,对于图G,处理出它有哪些联通块,然后,不含有特殊点的联通块要连接到某一个含有特殊点的联通块上.连接哪一个能使添加的边最多呢?当然是连接含有点数最多的含特殊点的联通块. tag:graph, greedy // BEGIN CUT HERE /* * Author: plum rain * score : */ /* */ // E…
DIV1 250pt 题意:用数组A表示置换,由该置换得到数组B(B[0] = 0, B[i] = A[B[i-1]]).给定A,求一个A',使得由A'得到的B为单循环置换且A'与A的差距最小.定义A与A'的差距为,有多少个i满足A[i] != A'[i].返回最小差距值.A.size() <= 50. 解法:要得到的B为单循环置换,则A'也为单循环置换.如果置换A含有t个循环节,if (t==1)差距为0,否则最小差距为t,原因是可以通过交换某两个数的位置,使得两个循环变为1个循环. tag:…
DIV1 250pt 题意:每天晚上需要点蜡烛,且每晚蜡烛燃烧1cm,第i天晚上需要点i根蜡烛.第一天白天的时候,拥有一些蜡烛,用vector<int>can表示他们的长度,问最多能烧几个晚上. 解法:模拟+贪心,每次烧长度最长的k支蜡烛即可. tag:simulation, greedy // BEGIN CUT HERE /* * Author: plum rain * score : */ /* */ // END CUT HERE #line 11 "OlympicCandl…
DIV1 250pt 题意:有几家宠物店,vecort<int>A表示每家宠物店含有小狗占小狗总数的百分比.现在要做扇形统计图统计每家店的小狗百分比,如下图,问作出来的扇形统计图中最多含有多少对半径夹角为180度.(左图两对,右图一对) (A.size() <= 8) 解法:因为A.size() <= 8,所以直接暴力枚举A中元素的全排列就好了.我的代码又写复杂了...一是枚举全排列可以用next_permutation()函数,另一个是对每个排列统计数量的时候写复杂了,不需要算j…