07 2012 档案
摘要:目前WA中,正在找错…… 1 #include <cstdio> 2 3 const int MAXN = 1000 + 10; 4 const int INF = 2147483645; 5 6 double stack[MAXN]; 7 double height[MAXN]; 8 double reverse[MAXN]; 9 int n;10 11 int Bsearch( int x, int y, double v )12 {13 int m;14 while ( x < y )15 {16 m = ( x + y ) / 2;17 ...
阅读全文
摘要:题目链接:http://poj.org/problem?id=3267题目:给出一个字典和一个字符串,问这个字符串中最少删去几个字符,能使它变成由字典中的单词组成的序列。分析:从字符串的第一个字符开始,在字典中依次寻找与其匹配的单词:dp[i] = min( dp[i], dp[ i - 1] + 1 ); 如果找不到匹配单词dp[i] = min( dp[i], dp[ i - ( len[j] + cnt ) ] + cnt ); 如果第 j 个单词与其匹配dp[i] 代表到字符串第 i 个字母时需要删去多少个字符,len[j]是字典中第 j 个单词的长度,cnt...
阅读全文
摘要:最大值最小化问题,二分+贪心,参考刘汝佳白皮书151页。之前我的代码在UVa上交过了,但是在ZOJ上却是WA。后来才发现是错在这两组数据:24 3100000 1 1 14 31 1 1 100000 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 1000 + 10; 5 6 int m,k; 7 long long int num[MAXN]; 8 long long int sum; 9 bool w[MAXN]; 10 11 bool Judge( long long int x ) 1
阅读全文
摘要:题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1102正着做9种情况:ininputinputoninputoneoutoutputoutputonoutputoneone反着做貌似更简单一些,情况更少一点。我是正着做的。 1 #include <cstdio> 2 3 const int MAXN = 10000000 + 5; 4 5 char str[MAXN]; 6 7 bool Judge() 8 { 9 if ( !(str[0] == 'o' || str[0] == 'p'
阅读全文
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1859题目:给出一个矩阵,求出指定子矩阵中的最小元素。我用的不是正规解法,纯属水过去的……这个是留着自己看的,大家就不要学了。 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 300 + 10; 5 6 int map[MAXN][MAXN]; 7 int Mat[MAXN][MAXN]; 8 9 int n;10 int INF = 2147483645;11 12
阅读全文
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=986最长上升子序列…… 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 40000 + 10; 5 6 int n; 7 int num[MAXN]; 8 int stack[MAXN]; 9 10 int Bsearch( int x, int y, int v )11 {12 int m;13 while ( x < y )14 {15 m =...
阅读全文
摘要:题目链接:http://poj.org/problem?id=3233题目:给出一个 n×n 的矩阵 A 和一个整数k, 求S=A+A2+A3+ … +Ak.其中n(n≤ 30),k(k≤ 109) ,m(m< 104).分析:两次二分,A^i可以用矩阵快速幂,然后求和二分。比如,当k=6时,有:A + A^2 + A^3 + A^4 + A^5 + A^6 =(A + A^2 + A^3) + A^3*(A + A^2 + A^3)--------------------------------------我用的递归求和,程序很杯具的跑了2s……等有空再改改吧,写的真的很糟糕
阅读全文
摘要:参考资料:http://baike.baidu.com/view/379209.htmhttp://wenku.baidu.com/view/a3c70f641ed9ad51f01df2f1.html(1) & 按位与 如果两个相应的二进制位都为1,则该位为1,否则为0应用:二进制取位。例如:a & 1 可以用来判断a的奇偶,结果为1则是奇数,为0则是偶数。(2) | 按位或 两个相应的二进制位中只要有一个为1,则该位为1,否则为0应用:对二进制位上的特定位进行无条件赋值。例如:a | b 就是把二进制最末位强制改为1,如果需要改为零,则 a | b - 1 即可。其实际意义.
阅读全文
摘要:跟UVa 10453 一个类型的题。题目:给定一个字符串,可以进行 添加任意一个字符,删除任意一个字符,替换任意位置的一个字符变为任意另一个字符 这三种操作,求使得该字符串变成回文串最少操作步数。添加一个字符与删除一个字符等效,因此只考虑添加。递推公式:dp[x][y]代表位置x到位置y的字符串变成回文串的最小操作数if ( str[x]==str[y] ) dp[x][y] = dp[x+1][y-1];else dp[x][y] = min(dp[x+1][y], dp[x][y-1], dp[x+1][y-1]) + 1; 1 #include <cstdio> 2 #inc
阅读全文
摘要:一直都不太会做这种字符串的动规题,今天看了一份解题报告,才稍微有点明白。感觉方法跟求最长公共子序列有点像……之前遇到过几个类似的,改天一块整理一下。-------------------------------------------------------------------题目:给定一个字符串,最少添加几个字符,能使它变成一个回文串。递推公式:dp[x][y]代表从第x个字符到y个字符中间最少需要添加几个字符。if ( str[x] == str[y] ) dp[x][y] = dp[x+1][y-1];else dp[x][y] = min( dp[x][y-1], ...
阅读全文
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4562题目:给出一组数列和六种操作, 输出经过P次操作之后的数列。分析:因为P(1≤ P ≤ 109)很大,所以直接模拟会超时。也是看了解题报告之后才知道要用矩阵快速幂做。首先,把操作转化为矩阵乘法。因为 1×n 的矩阵乘以 n×n 的矩阵还是得到一个1×n 的矩阵,所以对数列的每一种操作都可以描述成一个n×n 的矩阵。然后再用矩阵快速幂得结果即可。快速幂模板:http://www.2cto.com/kf/201207/140
阅读全文
摘要:题目大意:给出一些建筑物的高度与宽度,求出一条最矮的抛物线运动轨迹,能够跨过所有的建筑物。输出初速度与水平方向的夹角,以及初速度的大小。重力加速度取9.8m/(s^2)思路:因为该抛物线过固定点(0,0)和(D,0)(D为所有建筑物宽度之和),故设抛物线方程为:y=A*x*(x-D)建立直角坐标系,得到最高的那一圈点的坐标。例如第二组样例:5010.52011.52510101507其对应坐标为:(10.500000,20.000000)(22.000000,25.000000)(32.000000,25.000000)(47.000000,10.000000)(54.000000,0.000
阅读全文