
暑期比赛
文章平均质量分 59
primo_001
这个作者很懒,什么都没留下…
展开
-
hdu 4193 - Non-negative Partial Sums(滚动数列)
题意:给定一个由n个整数组成的整数序列,可以滚动,滚动的意思就是前面k个数放到序列末尾去。问有几种滚动方法使得前面任意个数的和>=0.思路:先根据原来的数列求sum数组,找到最低点,然后再以最低点为始点,求解题目答案,(每求解一始点i,符合要求的条件为:sum[i]>=minx,[minx是i=sum[i])代码如下:#include #include #include原创 2013-09-07 11:20:29 · 692 阅读 · 0 评论 -
hdu 4647 - Another Graph Game(思路题)
摘自题解:若没有边权,则对点权从大到小排序即可。。考虑边,将边权拆成两半加到它所关联的两个点的点权中即可。。。因为当两个人分别选择不同的点时,这一权值将互相抵消。代码如下:#include #include #include #define LL long long#define INF 0x7fffffff#define M 100010using name原创 2013-08-06 19:51:52 · 783 阅读 · 0 评论 -
xmu 1125 - 越野车大赛(三分)
题意:TheBeet正在参加一场越野车大赛。比赛的场地如右图: 共分三块,每一块地面的长宽均为N与M,但地表情况不同,越野车在这段路面上的最高速度也不同。 蓝色线表示TheBeet可能的行车路线。 比赛的要求是要求选手从比赛的场地左上角驾车至右下角。TheBeet想知道如果他在所有路段都以最快速度行驶(不考虑加速阶段),最快能在多少时间内完成比赛。把 横向的边放到原创 2013-08-05 21:22:00 · 1375 阅读 · 0 评论 -
URAL 1200 - Horns and Hoofs(暴力+剪枝)
比赛时水过的,现在贴一下正规做法。#include #include #include #include #include #include #include #include #include #include #define LL long long#define LLU unsigned long long#define INF 0x7fffffff原创 2013-08-05 14:36:50 · 1038 阅读 · 1 评论 -
SDKD Single training #6未完成题目
A SPOJ ORDERS http://www.spoj.com/problems/ORDERS/B SPOJ DIV15 【已整理】C SPOJ PARTPALI 【已整理】D SPOJ TAUT http://www.spoj.com/problems/TAUT/E SPOJ WMELON原创 2013-07-29 21:33:14 · 896 阅读 · 0 评论 -
SDKD Single training #8未完成题目
AURAL 1108【已整理】BURAL 1123【已整理】CURAL 1158D URAL 1160 【已整理】EURAL 1105原创 2013-07-31 16:02:48 · 576 阅读 · 0 评论 -
URAL - 1117 Hierarchy(找规律)
题意:给定一个关系树,a和b之间传递信息,问需要经过多长时间,其中每个人只能想编号临近的人传递信息,有上下关系的两人传递信息不花时间。思路;这个题的题意很不好理解,我在比赛中只能看出这道题是找规律的题目,但是由于题意没有理解清楚,代码交上一直wa。。后来就放弃了。。。两个没有上下关系的人中间隔了几个人,就得花费几天的时间。这里的间隔是指沿树的路径走上去经过的人数。例如从7到8 就经过了原创 2013-08-03 20:09:25 · 754 阅读 · 0 评论 -
SDKD Single training #10未完成题目
AURAL 1097 BURAL 1066 【已整理】CURAL 1069 【已整理】DURAL 1169 EURAL 1117 【已整理】原创 2013-08-03 20:14:32 · 624 阅读 · 0 评论 -
URAL - 1066 Garland(二分)
比赛的时候明明知道是二分,却没有写出来。。。用二分法的特征:单调用三分法的特征:只有一个凸点开始的时候我还想对最后一个节点二分,其实没这个必要,因为我有个同学对这道题目推了大半张纸,最后的推出来的式子还是跟第二个点相关,下面说一个比较巧妙的方法,二分第二个点,(这是因为第二个点的高度和最后一个点的高度是正相关的,第二个点的高度如果跟第一个点相同,则第三,四个点的高度会依次增加,如果原创 2013-08-03 17:01:25 · 740 阅读 · 0 评论 -
hdu 4648 - Magic Pen 6(“水”题)
摘自题解: 题意转化一下就是:给出一列数a[1]...a[n],求长度最长的一段连续的数,使得这些数的和能被M整除。分析:设这列数前i项和为s[i],则一段连续的数的和 a[i]+a[i+1]+...+a[j-1]+a[j]=s[j]-s[i-1],所以这段连续的数的和能被m整除的条件就是 (s[j]-s[i-1]) % m == 0,即 s[j]%m-s[原创 2013-08-06 19:23:40 · 727 阅读 · 0 评论 -
hdu 4651 - Partition(五边形数定理)
定理详见维基百科。。。。http://zh.wikipedia.org/wiki/%E4%BA%94%E9%82%8A%E5%BD%A2%E6%95%B8%E5%AE%9A%E7%90%86代码如下:#include #include #include #define LL long long#define INF 0x7fffffff#define MOD 1000000007原创 2013-08-06 21:33:49 · 998 阅读 · 0 评论 -
hdu 4698 - Counting(思路)
转:题意:给定一个二维平面,其中x取值为1-N,y取值为1-M,现给定K个点,问至少包括K个点中的一个的满足要求的共有多少中取值情况。也就是说K个点中至少一个点落在所给定的区间内。解法:正面求解,由于点只有1000个,因此直接暴力离散化之后的x轴坐标,对于y轴则可以通过增加一个一个加入点,使用一个set来维护纵轴有多少种不同的取法。代码如下;#include #inclu原创 2013-08-31 11:47:58 · 910 阅读 · 0 评论 -
hdu - 3952 Fruit Ninja(简单几何)
思路来自于:http://www.cnblogs.com/wuyiqi/archive/2011/11/06/2238530.html枚举两个多边形的两个点组成的直线,判断能与几个多边形相交因为最佳的直线肯定可以经过某两个点(可以平移到顶点处),所以暴力枚举两个点就好了如果有模版的话,写代码就快多了。代码如下:#include #include #include #i原创 2013-08-17 15:01:11 · 677 阅读 · 0 评论 -
hdu 3951 - Coin Game(找规律)
这道题是有规律的博弈题目,,,所以我们只需要找出规律来就ok了牛人用sg函数暴力找规律,菜鸟手工模拟以求规律。。。【牢骚】if(m>=2){if(nelse {first无法一口吃掉所有的,所以second成了主动的了,如果first第一口吃掉k1个,那么明智的second只要吃掉k2个就可以了(n-k1-k2是偶数,也包括0的),使得 剩下的数字是分成两个数字数目相等原创 2013-08-17 15:28:20 · 670 阅读 · 0 评论 -
hdu - 3959 Board Game Dice(数学)
这道题比赛中没做出来,赛后搞了好久才出来的,严重暴露的我薄弱的数学功底,这道题要推公式的,,,有类似于1*a+2*a^2+3*a^3+...+n*a^n的数列求和。最后画了一张纸才把最后的结果推出来。::(x*M^x)/N.而且通过这道题我发现有些数学函数还不如直接循环来的快,例如这道题中求x的值的时候。方法一:int x = int(log(n)/log(m)+0.5);原创 2013-08-16 20:56:36 · 861 阅读 · 0 评论 -
SPOJ ONEZERO(搜索)
搜索的好题,,,,摘自题解:题意; 给一个数n,求n 的最小的倍数,满足它的10进制 表示中每一位不是0就是1。思路: 用f(x)表示被n整除取模后的最小数,那么从0开始,每次往后添0或者1,如果得到的数与某个已经得到的数同余,就扔掉,不然就加入队列中继续搜。。。时间复杂度O(N).代码如下:#include #include #incl原创 2013-08-07 17:07:47 · 683 阅读 · 0 评论 -
zoj 3717 - Balloon(2-SAT)
裸的2-SAT,详见刘汝佳训练指南P-323不过此题有个特别需要注意的地方:You should promise that there is still no overlap for any two balloons after rounded.模版题,代码如下:#include #include #include #include #include #include原创 2013-08-20 08:56:53 · 679 阅读 · 0 评论 -
zoj 3725 - Painting Storages(动归)
题目要求找到至少存在m个连续被染成红色的情况,相对应的,我们求至多有m-1个连续的被染成红色的情况数目,然后用总的数目将其减去是更容易的做法。用dp来找满足条件的情况数目,,状态:dp[i][0]和dp[i][1]分别表示第i个柱子被染成红色和蓝色的情况数目。状态转移:dp[i][0] = dp[i-1][0]+dp[i][1]-dp[i-m][1];原创 2013-08-19 20:05:15 · 657 阅读 · 0 评论 -
URAL - 1069 Prufer Code (图的重建)
给定一个树,每次删除一个编号最小的叶子节点,然后将叶子节点的父亲节点输出,要求根据该序列还原这棵树。思路:找度为0的点,(这样的点不会成为父亲节点,只能是叶子节点)放到优先队列中,模拟删除点的过程即可。(没删除一个点,就对应序列中的一个父亲节点)代码如下:#include #include #include #include using namespace std;#defi原创 2013-08-03 16:48:15 · 788 阅读 · 0 评论 -
SPOJ - POSTERS(离散+暴力or离散+线段树)【待完善】
1、离散+暴力的方法是最容易想到的。思路:点坐标10^7的范围,使得最容易的暴力无法实现。但坐标的个数最多有2*n个,(n=40000),这样看的话,点的分布就过于分散了,所有我们要找个方法来把点坐标集中起来。而离散化就是能很好的实现这个思路,离散化了以后,n是10^4的规模,那么我们再次使用暴力的话,就能擦边的过掉这道题了。代码如下:#include #include #incl原创 2013-07-28 19:07:39 · 945 阅读 · 0 评论 -
SDKD Single training #4未完成题目
A SPOJ RENT 【已整理】B SPOJ HAN01 【已整理】C SPOJ BALL1 http://www.spoj.com/problems/BALL1/D SPOJ POSTERS http://www.spoj.com/problems/POSTERS/E原创 2013-07-26 19:22:03 · 622 阅读 · 0 评论 -
URAL - 1123 Salary(水题)
比赛中没作出来的大水题~~题意:给定一个数字,查找大于等于该数字的最小的回文数字。思路:在纸上画画,就知道规律了,回文串以前面不变为原则,这样才能保证最接近原数字的。例如123111要变成123321,但如果123456这样的该怎么办呢。第一步也是变成123321,但是我们发现这样反而变小了,这是因为对应的数位上前面的数字比后面的数字小,这样我们应该从最中间原创 2013-07-31 15:08:10 · 860 阅读 · 0 评论 -
spoj1421 - Goods(循环节)
题意:给定一个乱序的排列,要求重排成1~n的顺序,且调换方式为:每次只能两个数字对换,每轮可以对换任意多次,但每轮中每个数字只能对换一次,问需要几轮才能达到最终要求。思路:找出所有的循环节,若循环节长度为1,则不需要交换若循环节长度为2,很明显的一轮就可以搞定,若循环节的长度>2的话,就需要2轮了,每找出一个循环节就进行一轮的交换,(把循环节第一个和最后一个交换,第原创 2013-07-24 20:32:16 · 727 阅读 · 0 评论 -
spoj1108 - Card Trick(简单思路题)
暑假第二次个人赛A - Card Trick比赛的时候对于这个题没仔细读题就放下了,可悲啊。一摞纸牌为了按步骤掀开的牌的数字是1,2,3,4,。。。要求写出原来的顺序。用一个数组存位置,另一个数组存纸牌。每次用掉一个位置后就把数组中该数字删除,下次寻找位置的时候也不用判断位置是否用过了,此功能可以用vector完美实现。代码如下;#include #include原创 2013-07-24 17:21:03 · 847 阅读 · 0 评论 -
spoj1435 - Vertex Cover(贪心or树形dp)
C - Vertex Cover是uva10859简化版题意: 找一个最小点集,使得每条边都能至少找到自己的一个端点,这道题目前膜拜了两种方法,1-贪心 2-树形DP贪心 思路:找出每个度为1的点a,找出它的唯一想相邻的节点b,则对于a和b之间的这条边而言,把b放到点集中是较优的决策。然后把点b及和b相连的边都删去,与b相邻节点的度数减1, 这样做是因为把b放到点集中原创 2013-07-24 16:39:05 · 1065 阅读 · 0 评论 -
URAL - 1160 Network(最小生成树)
比赛中的比较裸的模版题,直接抄的模版,题意:给定几个需要链接的点以及能够利用的边,要求用这些变将所有的点都链接起来,且所用边长的最大值尽量小。思路:起初,看题意是最小生成树,但题目所给的样例,并不是最小生成树的结果,纠结半天,然后又看了几遍题目,还是不知所云,最后试着把模版敲上去,submit~~然后便ac了,后来问了才知道,这道题确实最小生成树,不过只要所用边的最大值不变原创 2013-07-31 14:32:34 · 1318 阅读 · 0 评论 -
SPOJ - WMELON(离散化+暴力or离散化+线段树)【待完善】
题意:给出n个点坐标和他们各自的值,求满足条件"矩形内的点值的和不小于k"的最小矩形面积。1、离散+暴力思路,先对y坐标离散化,然后确定两条平行与x轴的直线,求两条直线内满足条件的最小的矩形面积。代码如下:#include #include #include #include #include using namespace std;#define M 1005原创 2013-07-29 19:52:32 · 997 阅读 · 0 评论 -
SPOJ - DIV15(数论)
题意:给一个数字字符串,要求给出能被15整除的最大的数。思路:15是3和5的倍数,那么能够被15整除的的数,肯定也是3和5共同的整倍数。而3和5的倍数,有很有特点,3的倍数要求每位上的数字之和是3的整倍数,而5的倍数要求个位数上是0或者5.综合其特点,我们就可以找到思路了。。。如果数字中有即没有0有没有5的话,则该数字不符合条件,如果每位上的数字之和sum能被3整除,则该数字在原创 2013-07-29 16:45:46 · 827 阅读 · 0 评论 -
URAL - 1108 Heritage(大数)
恶心的大数运算,,,比赛的时候,如果没有模版,一般置后的题目了,,,,题意:要求a,b,c,.....使得1-1/a-1/b-1/c-1/d.......的结果最小。。。代码如下:#include #include #define MOD 100000000long long ans[100000], last[100000], temp[100000];int ans原创 2013-07-31 15:58:27 · 694 阅读 · 0 评论 -
hdu 4628 - Pieces(压缩dp)
题意:给定一个串,每次可以删除一个回文子串,问把全串删干净的最少次数。思路:用状态压缩把所有的状态枚举出来,用数组记录所表示状态所有字符被删除干净的最少次数。状态:dp[x]表示在状态x下把所有字符删除的最少次数。状态压缩:dp[x] = min{dp[x], dp[k]}(k是x的子集)这样的dp的边界不再是dp[0]或dp[n]了。而是对每个状态都要设定原始值,如果某个原创 2013-07-30 19:56:49 · 1116 阅读 · 4 评论 -
hdu 1003 - Max Sum(分治of贪心)
今天比赛的一道题目,有位同学写的代码比我写的好多了,而且有点贪心的意思,所以就贴了上来,用sum来存前面的正和,如果sum这是因为前面的和小于0的话,对后面的最大连续和,做不了贡献,反而会拖了后腿。如果现在的sum比max要大的话,则更新答案,代码如下:#include #define M 100005#define INF 0x7fffffffint main (){原创 2013-08-03 11:42:58 · 700 阅读 · 0 评论 -
SPOJ RENT(简单动归)
快被这道题搞死了。又是题意理解有误题意:有n个订单,每个订单有开始时间,占用时间,愿意支付的money3个参数,要求在这n个订单中选择不冲突的的订单使得money总和最大。思路:对订单的开始时间或者结束时间排序,然后用动归求最优解,如果对开始时间从小到大排序,则动归顺序应从后向前,如果对结束时间从小到大排序,则动归顺序应该从前向后。对于每个订单决策就是选择or丢去状态:dp[i原创 2013-07-26 15:12:15 · 811 阅读 · 0 评论 -
SPOJ HAN01(典型汉诺塔)
题意:给一挪动次数,要求写出此时的汉诺塔上的状态.思路:汉诺塔的典型利用,用递归实现即可。代码入下:#include #define M 64long long n, k;int ai, bi, ci, a[M], b[M], c[M];void f(int i, int x){ if(i==1) a[ai++] = x; if(i==2) b[bi++] =原创 2013-07-26 16:16:23 · 797 阅读 · 0 评论 -
SPOJ MARBLES(简单组合)
题意:把n个求分给k个颜色,思路:转化一下,将球的n-1个空隙插上隔板,那么答案就是c(n-1,k-1);代码如下:#include long long c(int n, int k){ if(n-k<k) k = n-k; double ans = 1; for(int i = 1; i <= k; i++) ans*=1.0*(n-i+1)/i;原创 2013-07-26 12:21:34 · 784 阅读 · 0 评论 -
cf_332A - Down the Hatch!(水题)
水题一道,就是题目描述太坑了。。。题意:对于每个序号为k*n+1的位置,若此位置前面三个字母是相同的,则答案加1.代码如下:#include char str[4000005];int main (){ int n; scanf("%d",&n); getchar(); gets(str); int ans = 0; for(int原创 2013-07-26 08:18:06 · 1022 阅读 · 0 评论 -
hdu4619 - Warm up 2(联通图or贪心0r二分图匹配)【待完善】
这道题好多种做法,,,1、联通图。 由于题目特点,这道题可以转化为求图的改图的子联通图,每个包含x个点的联通图都可以最多得到不重叠的x/2个牌。注意这句话:很重要的(It's guaranteed the dominoes in the same direction are not overlapped, but horizontal and vertical dominoes原创 2013-07-25 21:31:39 · 1401 阅读 · 0 评论 -
hdu4618Palindrome Sub-Array(乱搞)
多校联赛第二场1008结题报告上竟然给的是乱搞二字。题意:从矩阵中找最大的正方形子矩阵使得每行每列的数字是符合回文。输出最大的边长。1、动归 状态;dp[i][j][k]表示以(I,j)为左上角坐标点且边长为k的子矩阵是否符合回文。状态转移:dp[i][j][k] = 1 (如果dp[i-1][j-1][k-2]==1&&外围的四条边上的数字符合回文, 否则dp[i][j][原创 2013-07-25 20:16:18 · 792 阅读 · 0 评论 -
SDKD Single training #2未完成题目
A Card Trick 已整理B The Easiest Problem http://www.spoj.com/problems/PT07B/C Vertex Cover 已整理D Goods 已整理E Matrix http://www.spoj.com/problems/KPMATRIX/原创 2013-07-24 21:01:27 · 697 阅读 · 0 评论 -
SPOJ - PARTPALI(数位dp)
题意:输入两个数n, k,要求出存在的所有的“长度为k的回文数并且该数能整除n”的个数,思路,k到了20位,暴力果断的超时了,,,不管我如何优化,当n = 2的时候程序要都跑好久的然后看人家代码用的数位dp,复杂度仅有k*n,所以果断的ac了。状态:dp[i][j]表示第i位数字取模n后为j的情况个数。状态转移:dp[i+1][temp] = sum{dp[i][j], tem原创 2013-07-29 21:22:52 · 968 阅读 · 0 评论