随笔分类 -  00 . . |解题报告

HDU 4749: Parade Show
摘要:看大神代码,发现上交大神很棒的一个思路题意:在源数字串中找出尽量多的连续子串,要求子串任意两值的大小关系与目标串相同位置的值的大小关系相同。求源串能拿出的子串的最大数量。关键词:RK-Hash优点:O(k)时间完成匹配检查(关键在于他能O(1) 完成 所有 相同位 检查)方法:对于一个K值,用某个进制数来表示其位置。 比如 123121 中 的值 1 最后表示成 100101。 然后,对于目标串也RK-hash,对于某个值,只要比较这个数,就能知道是否相同位都相同了。代码留恋:#include#include#include#include#includeusing namespace std 阅读全文

posted @ 2013-09-21 23:10 ShineCheng 阅读(424) 评论(0) 推荐(0)

hdu 2058:The sum problem
摘要:题意序列1,2,...n,求出所有子串,使得和为m类型数学思路由求和公式易得b(b+1)/2 - a(a+1)/2 = m ( 0 File Name: hd2058.cpp > Author: Shine > Created Time: 2013-06-27 下午 6:16:55 > QuestionType: 数学 > Way: (b-a)(a+b+1) == 2m (其实暴力枚举a+b+1的值就可以了(到根号2m)) > Submit: 3WA 1AC > Gain: 尝试了一下状态枚举和分解质因子的写法 > Experien... 阅读全文

posted @ 2013-06-27 20:19 ShineCheng 阅读(274) 评论(0) 推荐(0)

HDU 2059:龟兔赛跑
摘要:题意一条直线上有n个充电站(告诉你位置),乌龟刚开始有满电的电车,能开c距离,电动速度vt1,没电后脚踩速度vt2,到充电站可以选择充电,充电时间为t。直线长l, 兔子速度为vr, 问乌龟有没有可能赢。类型:DP思路:my:类似cf一题的思路大体思路:把一段路合理分割,就可以把重叠的区间分开,然后就可以算出每段路的最小花费。最后寻找最短的拼接方法就好了。首先状态压缩,节点为所有充电站的点和他们+c的点(另外:包含0和c)然后对于每个点i,算出他们到之前的某个点j的最小花费cost[i][j]然后 设dp[i]为到i号节点所需最小时间状态转移为 dp[i] = min(dp[j] + cost[ 阅读全文

posted @ 2013-06-26 13:08 ShineCheng 阅读(260) 评论(0) 推荐(0)

POJ 1011:木棒
摘要:传送门http://poj.org/problem?id=1011题目大意已知原来有等长若干木棒,现在给你一堆断了的木棒的长度,问原来的木棒最短是多长题目类型DFS + 剪枝 + “贪心优化”思路http://blog.csdn.net/lyy289065406/article/details/6647960三个剪枝1)设最长的木棒长度max ,木棒长度和sum, 则可能区间为[max, sum/2] 并且 长度能被sum整除2)一次拼接中,一次循环中,同长度的木棒只检测一次3)每次拼接的第一个木棒,如果不成功则说明这个木棒一定不能成功。所以break一个优化需要逆序搜索。(两个短的比一个长的 阅读全文

posted @ 2013-06-24 14:36 ShineCheng 阅读(534) 评论(1) 推荐(0)

CodeForces 315.D Sereja and Periods
摘要:传送门:http://codeforces.com/contest/315/problem/D类型:字符串题意:给出两个重复的字符串,告诉你重复单元和重复次数,问第二个字符串在第一个串中出现的次数(子序列)方法:http://blog.csdn.net/u010710717/article/details/9059403求出串二单元每个位置开头时,在串一单元中能完整出现的次数,和经过这个单元后, 串二当前位置。然后从0到串一重复次数模拟一遍。得到串二单元在串一中出现的完整次数最后除以串二重复次数(取整),得到答案。代码: #include <stdio.h> #include .. 阅读全文

posted @ 2013-06-11 12:11 ShineCheng 阅读(259) 评论(0) 推荐(0)

CodeForces #1 B. Spreadsheets
摘要:传送门:http://codeforces.com/contest/1/problem/B类型:简单模拟,进制转换题意:对于第23行第55列,有两种描述方式:一种是R23C55一种是BC23。其中BC表示55.(A->1,Z->26,AZ->27)给出其中一种表达方式,求另一种思路:本题就是10进制和以1开始的 1-26 这特殊的 26进制 的相互转换。方法:10 to 1-26while (c) { re[p--] = (c-1)%26 + 'A'; c = (c-1)/26;}从低位到高位的顺序输出。注意 c-1,每次相当与把个位的 1-26 转换成了 0 阅读全文

posted @ 2013-05-30 01:52 ShineCheng 阅读(291) 评论(0) 推荐(0)

USACO 1.1-beads
摘要:题意:给一个项链(首尾相连),从某个地方断开,然后两头取相同的珠子,问最多能取多少个有三种珠子:r,w,b。其中w是百变珠子,可以当成w或者r。类型:模拟思路:首先,断开的地方不会是某个连续串的中间(因为,断开在中间比断开在两头非但不会得到更好的结果,反而可能得到更差的结果)其次,bw..wb = b..b rw..wr = r..r整个程序的思路就是先压缩字符串(把相同的合并)然后处理第二个条件再次压缩,得到最终串然后枚举每个地方,模拟人去取,看能取多少个(关键是考虑好各种特殊情况。。。。恶心啊)代码:/*PROG: beadsLANG: C++*//******************** 阅读全文

posted @ 2013-05-20 15:45 ShineCheng 阅读(196) 评论(0) 推荐(0)

POJ 1042:Gone Fishing
摘要:题意:有一排池塘,从i到i+1个池塘需要t[i]时间(我的代码里是t[i+1]), i池塘一次能抓到f[i]只鱼,每抓一次后少d[i]只,到少于等于0时,之后都为0问告诉你所有信息,求最优情况(最优情况相同时,取前面时间花的多的)类型:DP动态规划思路:状态含义:dp[i][v]为第i个池塘还有v时间时,的最优答案状态转移:那么对于池塘i,如果它有2中选择1:其实没到过池塘i2:到了池塘i并停留k时间当然,如果要求必须到,那么第一个选择忽略。初始化:对于所有i=1,那么所有时间都用来停留在i特殊:如果必须到达当前,然而所给的时间少于从上一个池塘来到这个池塘的时间,则IMPOSSIBLE(注意, 阅读全文

posted @ 2013-05-19 23:52 ShineCheng 阅读(249) 评论(0) 推荐(0)

H.High String
摘要:原题:Description:We define the srting which can satisfy the following conditions as High String:1)The string only contains six kinds of characters: A,B,C,D,E and F;2)cont(A) = count(b), count(c) = cont(D),and count(E) = count(F). count(X) means the number of character X in the string;3) Except the str 阅读全文

posted @ 2013-05-19 22:33 ShineCheng 阅读(247) 评论(0) 推荐(0)

USACO 1.1-friday
摘要:题意:计算1900年后N年内(1900~1900+n-1)所有月的13号是星期几的个数思路:简单模拟易错点:当年不算。如算1906年时,这年有365天是不能算的当年闰年影响条件:当年是闰年,对当年天数有影响,还得保证月份>2经验:模拟题,最好用最简单的方式去做。。或者,全部先想清楚再做。代码:简单方式/*PROG: fridayLANG: C++*/#include <cstdio>#include <cstring>#include <cstdlib>int yearday[410], monthday[13] = {0,31,28,31,30,31 阅读全文

posted @ 2013-05-18 11:14 ShineCheng 阅读(154) 评论(0) 推荐(0)

POJ 1141:Brackets Sequence
摘要:题意:定义合法串为(),[]以及他们的并列组合如()[],()(),或嵌套组合如([]),(())。 其实正常理解就好~然后给你一个串,让你求出把它改对后的最短合法串。类型:DP动态规划思路:当我拿到一个字符i, 那么在一种最优结果中,它只有这么两种结果:要么和某个字符匹配,要么不匹配。定义状态:dp[i][j]为 i到j的子串中 所能做到的最大匹配数符号数。最大匹配符号数说明:如(([))]] 如果这么匹配(([))]] 数量为2, 而这样匹配 (([))]] 数量为4。易知后者也是最大的,所以这个子串最大匹配符号数为4.状态转移:首先特判:若i所在字符与j所在字符能匹配(() 或 []). 阅读全文

posted @ 2013-05-15 17:11 ShineCheng 阅读(133) 评论(0) 推荐(0)

POJ 2479:Maximum sum
摘要:题意:告诉你一些数字 ,让你在其中找出两段,使得这两段数字累加的和最大。Hint:如给你的数字是 10 1 -1 2 2 3 -3 4 -4 5 -5 则答案是 13。因为In the sample, we choose {2,2,3,-3,4} and {5}, then we can get the answer.类型:DP动态规划思路:My思路:(本思路过于奇葩,脑血拴心脏病患者请不要阅读)把所有的相关的条件都表示成状态,然后写出状态之间转移的方程所以我本题弄的状态十分恶心。。。dp[i][j][k]表示从第0个数到第i个数,(j==0?包含:不包含)其本身的(k==0?单区间:双区间) 阅读全文

posted @ 2013-05-13 18:38 ShineCheng 阅读(152) 评论(0) 推荐(0)

HDU 1203:I NEED A OFFER!
摘要:首先想明白怎么计算概率,就是计算他的逆事件,也就是算失败概率然后用1减然后很自然的得到递推式dp[v] = min(dp[v], dp[v-c[i]]*(1-w[i])dp[v]状态的值表示当前状态下的失败概率注意dp数组初始化为1附代码HDU 1203:I NEED A OFFER!/************************************************************************* > File Name: hdu1203.cpp > Author: Shine > Created Time: 2013-05... 阅读全文

posted @ 2013-05-10 14:48 ShineCheng 阅读(171) 评论(0) 推荐(0)

HDU 2546 饭卡
摘要:类型:01背包策略就是把最大的留起来,剩下的尽量去买到5块钱,最后用最大的买。留最大不用说。尽量买到5块钱就是一个背包问题。即 背包容量为m-5每个物品的容量=价值=菜的价格特殊判断:如果m < 5直接输出就可以证明策略正确性:假设最后买的不是最大的,设为b.最大的设为a. 其他设为C有(C+a)这个组合尽量买到5块钱 + b > (C+b)->5块钱 + a1: C+a <= m-5则 C+b <=m-5此时 C+a+b = C+b+a 假设不成立2: C+a > m-5则假设Ci + a 是其尽量买到5块钱的最优组合因为 Ci+b < m-5 (C 阅读全文

posted @ 2013-05-10 10:10 ShineCheng 阅读(175) 评论(0) 推荐(0)

POJ 3670 Eating Together
摘要:之前一直不过,最后的过的思路如下:dp[i][j]表示的含义是 到第i位,最高为j的子序列的最长长度。递推式:dp[i][1] = dp[i-1][1] + (a[i] == 1?1:0);dp[i][2] = max(dp[i][1], dp[i-1][2]) + (a[i]==2?1:0);dp[i][3] = max3(dp[i][1], dp[i][2], dp[i-1][3]) + (a[i]==3?1:0)高度为1的,最长只能为之前的,加上本身(如果本身是1则可加,否则不行)(1111_)高度为2的,为刚才算出的 高1序列最长 与 之前高2序列最长 的最大值 再视情况包含本身。(. 阅读全文

posted @ 2013-05-09 12:44 ShineCheng 阅读(147) 评论(0) 推荐(0)

SGU 115. Calendar
摘要:2001年某月某号星期几到那天天数%7+1 然后修正到正确日期再 %7SGU 115. Calendar /************************************************************************* > File Name: sgu115.cpp > Author: Shine > Created Time: 2013-05-06 下午 6:24:01 > QuestionType: 模拟 > Way: > Submit: 1WA(很不应该,没自己检验,就交,公式错误) 1AC ... 阅读全文

posted @ 2013-05-06 18:44 ShineCheng 阅读(134) 评论(0) 推荐(0)

SGU 123 The sum
摘要:求Fibonacci前K项和(0<K<41)面向大海春暖花开SGU 123 The sum /************************************************************************* > File Name: sgu123.cpp > Author: Shine > Created Time: 2013-05-06 下午 6:05:51 > QuestionType: Water > Way: > Submit: > Gain: > Experience: ***... 阅读全文

posted @ 2013-05-06 18:12 ShineCheng 阅读(131) 评论(0) 推荐(0)

SGU 105 Div 3
摘要:找规律112123123412345123456123456712345678123456789YYYYYY如上表规律。每三个,第一个不是,后两个是。所以 答案=N 包含的完整周期(不包含N) * 2 + N所在周期的位置-1就是(n-1)/3*2+(n%3==0?3:n%3)-1 更简洁的表示方式: n/3*2+(n%3)/2完整代码如下SGU 105 Div 3/************************************************************************* > File Name: sgu105.cpp > Author... 阅读全文

posted @ 2013-05-06 12:20 ShineCheng 阅读(158) 评论(0) 推荐(0)

SGU 102 Coprimes
摘要:裸的欧拉函数……暴力搜索也可以过……(代码写的很水很水很水,不要看!)欧拉函数版 /************************************************************************* > File Name: sgu102.cpp > Author: Shine > Created Time: 2013-05-04 上午 6:36:05 > QuestionType: 欧拉函数 > Way: > Submit: > Gain: > Experience: *********... 阅读全文

posted @ 2013-05-05 21:54 ShineCheng 阅读(191) 评论(0) 推荐(0)

SGU 100 A+B
摘要:SGU的A+B,同时也是博客园的A+B。View Code #include <cstdio>int main() { int a, b; while (scanf("%d%d", &a, &b) != EOF) { printf("%d\n", a + b); } return 0;}#include <cstdio>int main() { int a, b; while (scanf("%d%d", &a, &b) != EOF) { printf("%d\n&q 阅读全文

posted @ 2013-05-04 13:36 ShineCheng 阅读(117) 评论(0) 推荐(0)

导航