摘要:
这道题之前做过。左边线柱是升序排列的,所以要找右边线柱的最长升序列,因为最大范围是N = 40000,所以只能用o(nlogn)的写法。/*Accepted 296K 125MS C++ 581B 2012-04-22 19:00:19 */#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 40005int s[MAXN], top, t, n;int main(){ int T; scanf( "%d", &T); while( T --) { scan 阅读全文
posted @ 2012-04-22 19:05
找回失去的
阅读(186)
评论(0)
推荐(0)
摘要:
这道题是求一个最长下降子序列,o(nlogn)的算法也不难写,仿照最长升序子序列的写法,还好二分没写成死循环。这题输入比较坑爹,每组测试以-1结尾,结束所有测试也是-1,然后要求没两组之间有空行,在测试的时候看到的是输入每组第一个数才空行,这里浪费了不少时间…/*Accepted 168K 0MS C++ 627B 2012-04-22 18:33:00 */#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 32900int a[MAXN], t;int main(){ int to 阅读全文
posted @ 2012-04-22 18:40
找回失去的
阅读(221)
评论(0)
推荐(0)
摘要:
两道codeforce的题: 第一道题是将一个字符串的左边变成大写,右边变成小写需要最小的操作数,我们先预处理出第一个到第i个字符有多少大写字母up[i],第n个到第i个有多少个小写字母low[i]。假设我们是i左边都是大写,右边都是小写,我们操作数就是将左边的小写变成大写,右边的大写变成小写,操作数为i – up[i] + ls – i – low[i],整理下就是 ls – up[i] – low[i],遍历一遍找到最小值即可。/*Accepted 30 ms 2200 KB */#include<cstdio>#include<cstring>#include&l 阅读全文
posted @ 2012-04-22 17:24
找回失去的
阅读(739)
评论(0)
推荐(0)
摘要:
判断a的前i个字母和b的前j个字母能否构成 c的前 i + j个字母,递推,注意数组开大些,205居然会wa。/*Accepted 220K 0MS C++ 911B 2012-04-22 10:42:42 */#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 255bool match[MAXN][MAXN];char a[MAXN], b[MAXN], c[MAXN << 1];int la, lb, lc;void dp(){ int i, j; la = strl 阅读全文
posted @ 2012-04-22 11:03
找回失去的
阅读(217)
评论(0)
推荐(0)
摘要:
01背包,还好没忘记是怎么写的!/*Accepted 240K 266MS C++ 563B 2012-04-22 09:13:42 */#include<cstdio>#include<cstdlib>#include<cstring>#define MAXN 3407#define MAXM 12900#define max( a, b) ( a > b ? a : b)int w[MAXN], d[MAXN];int f[MAXM];int N, M;void init(){ for( int i = 1; i <= N; i ++) sc 阅读全文
posted @ 2012-04-22 09:16
找回失去的
阅读(168)
评论(0)
推荐(0)
浙公网安备 33010602011771号