IT民工
加油!
04 2012 档案
三道水题
摘要:做了三道水题,练手。水题也要细心POJ 1004:/*Accepted 180K 0MS C++ 187B 2012-04-26 16:48:20 */#include<cstdio>double a, sum;int main(){ sum = 0; for( int i = 0; i < 12; i ++) { scanf( "%lf", &a); sum += a; } printf( "$%.2lf\n", sum / 12); return 0;}POJ 2027/*Accepted 164K 0MS C++ 223B 阅读全文
posted @ 2012-04-26 17:14 找回失去的 阅读(199) 评论(0) 推荐(0)
ACdream OJ 1140 Counting Triangles
摘要:给出N条边,问这些边能组成多少个不同的三角形,每条边的长度是不同的。首先我们先将边长按照升序排序,然后枚举两条短的边,看最长边有多少种可能,累加。#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>using namespace std;const int MAXN = 2012;int T, N;int a[MAXN];int b_s( int len){ int left = 0, right = N - 1; 阅读全文
posted @ 2012-04-23 10:49 找回失去的 阅读(360) 评论(0) 推荐(0)
POJ 1631 Bridging signals
摘要:这道题之前做过。左边线柱是升序排列的,所以要找右边线柱的最长升序列,因为最大范围是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 找回失去的 阅读(188) 评论(0) 推荐(0)
POJ 1887 Testing the CATCHER
摘要:这道题是求一个最长下降子序列,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 找回失去的 阅读(225) 评论(0) 推荐(0)
居然现在才第一次做codeforce
摘要:两道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 找回失去的 阅读(743) 评论(0) 推荐(0)
POJ 2192 Zipper
摘要:判断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 找回失去的 阅读(218) 评论(0) 推荐(0)
POJ 3264 Charm Bracelet
摘要: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 找回失去的 阅读(170) 评论(0) 推荐(0)
COJ 1163 寒衣调(校赛D题)
摘要:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1163a[i - 1]表示i的前缀积,b[i + 1]表示i的后缀积,两者相乘取模就是所需的结果#include<cstdio>#define MAXN 100005int a[MAXN], b[MAXN];int n, m;int main(){ while(scanf( "%d%d", &n, &m) == 2){ for(int i = 0; i < n; i ++) scanf("%d",&a[i]); b 阅读全文
posted @ 2012-04-18 10:52 找回失去的 阅读(239) 评论(0) 推荐(0)
COJ 1165(校赛F题) Nearest Numbers
摘要:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1165把F题想得太难了,用贪心的思想,找局部最优解,看了解题报告就A了。#include<cstdio>#include<cstring>#include<cstdlib>#define MAXD 1000005#define min(a, b) (a < b ? a : b)const long long inf = 0x7fffffff;int la, lb, lc;long long a[MAXD], b[MAXD], c[MAXD];long l 阅读全文
posted @ 2012-04-18 10:24 找回失去的 阅读(284) 评论(0) 推荐(0)
一道关于DOTA的模拟题(CSU2012校赛)
摘要:#include<cstdio>#include<cstring>#include<cstdlib>const int bk[] = { 0, 200, 275, 325, 400, 475, 575, 675, 800, 900, 1000};const int team[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1};char s[15][30], a[30], b[30];int m[15], kill[15], n;int findbuf( char *x){ int i; for( i = 1; i <= 10; 阅读全文
posted @ 2012-04-17 08:57 找回失去的 阅读(271) 评论(0) 推荐(1)
COJ 1156 Switching bulbs
摘要:贪心.../*Accepted 2352 kb 292 ms C++ 1013 B 2012-04-14 21:39:44 */#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 100005int N, M;typedef struct{ int color, val;}T;T t[MAXN];int cmp( const void *_p, const void *_q){ T *p = ( T *)_p; T *q = ( T *)_q; return p->val - q 阅读全文
posted @ 2012-04-14 23:05 找回失去的 阅读(161) 评论(0) 推荐(0)
POJ 2240 Arbitrage
摘要:要套现的前提是有一种货币经过几次交换能是其到其本身的汇率大于1。就转换成了求任一货币到其自身的汇率,不过要通过其他货币才能转换到自身,所以用floyd算法,求出所有货币到其他货币或者自身的最大汇率。这里的floyd计算时是汇率相乘取最大值,这也是与普通floyd的区别。字符串的处理是本题设置的一个考点吧,不过还好对于这个已经无压力了。/*Accepted 192K 47MS C++ 1074B 2012-04-14 12:57:03 */#include<cstdio>#include<cstring>#include<cstdlib>const int M 阅读全文
posted @ 2012-04-14 13:01 找回失去的 阅读(596) 评论(0) 推荐(0)
POJ 1258 Agri-Net
摘要:很普通的一道关于最小生成树的题,回顾了下kruskal算法的写法。/*Accepted 332K 16MS C++ 987B 2012-07-23 23:03:38 */#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;const int MAXN = 105;int p[MAXN], r[MAXN * MAXN], u[MAXN * MAXN], v[MAXN * MAXN], w[MAXN * MAXN];int n 阅读全文
posted @ 2012-04-14 10:17 找回失去的 阅读(169) 评论(0) 推荐(0)
POJ 3253 Fence Repair
摘要:这道题类似于哈夫曼树,每次切付出的代价等于长度,所以我们要将长的先截出来。而题目是给出N截,以及每截的长度。所以我们每次加上短的,使总代价最少。学会了优先级队列的STL写法。/*Accepted 348K 32MS C++ 644B 2012-07-30 16:32:44*/#include<cstdio>#include<cstring>#include<cstdlib>#include<queue>using namespace std;typedef long long LL;int N;LL calc(){ LL ans; int len 阅读全文
posted @ 2012-04-13 19:15 找回失去的 阅读(138) 评论(0) 推荐(0)
POJ 1159 Palindrome
摘要:#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 5005#define max(a, b) ( a > b ? a : b)short f[MAXN][MAXN], len;char a[MAXN], b[MAXN];void rev(){ for( int i = len, j = 1; i >= 1; i --, j ++) { b[j] = a[i]; }}void dp(){ memset( f, 0, sizeof f); for( int i = 1; i 阅读全文
posted @ 2012-04-11 12:43 找回失去的 阅读(139) 评论(0) 推荐(0)
POJ 2250 Compromise
摘要:求文本的最长公共子序列,序列中每个元素都是一个字符串,学习了记录路径和递归输出的方法。/*Accepted 224K 0MS C++ 1186B 2012-04-11 11:19:14 */#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 105#define MAXM 31int f[MAXN][MAXN];char a[MAXN][MAXM], b[MAXN][MAXM];int mark[MAXN][MAXN];int na, nb, cnt;void output( int 阅读全文
posted @ 2012-04-11 11:24 找回失去的 阅读(248) 评论(0) 推荐(0)
POJ 1458 Common Subsequence
摘要:求最长公共子序列,题目居然没有给出字符串最大长度。/*Accepted 428K 0MS C++ 570B 2012-04-11 10:26:03 */#include<cstdlib>#include<cstring>#include<cstdio>#define MAXN 1 << 8#define max(a, b) ( a > b ? a : b)char X[MAXN], Y[MAXN];int f[MAXN][MAXN];int x, y;void dp(){ memset( f, 0, sizeof f); x = strle 阅读全文
posted @ 2012-04-11 10:29 找回失去的 阅读(132) 评论(0) 推荐(0)
POJ 1163 The Triangle
摘要:简单的数塔,用记忆化搜索或者递推都可以。/*Accepted 260K 16MS C++ 601B 2012-04-11 10:12:15 */#include<cstring>#include<cstdlib>#include<cstdio>#define MAXN 105#define max(a, b) ( a > b ? a : b)int d[MAXN][MAXN], a[MAXN][MAXN];int n;void init(){ for( int i = 1; i <= n; i ++) for( int j = 1; j < 阅读全文
posted @ 2012-04-11 10:14 找回失去的 阅读(169) 评论(0) 推荐(0)
POJ 2081 Recaman's Sequence
摘要:这是一道要打表的递推题。注意数组开得足够大就行。#include<cstdio>#include<cstring>#include<cstdlib>bool vis[4000000] = {false};//记录一个数是否出现在结果中int a[500005];void init(){ a[0] = 0; for( int i = 1; i <= 500000; i ++) { if( a[i - 1] - i > 0 && !vis[ a[i - 1] - i]) a[i] = a[i - 1] - i; else ... 阅读全文
posted @ 2012-04-11 10:02 找回失去的 阅读(231) 评论(0) 推荐(0)
POJ 1579 Function Run Fun
摘要:很基础的一个记忆化搜索,但是还是出了点小问题,数组只开到了25.但是我居然想记忆50的值,所以判断返回要从第三种情况开始,前面两种直接返回给定的值。/* Accepted 236K 0MS C++ 717B 2012-04-11 09:39:09 */#include<cstdio>#include<cstring>#include<cstdlib>int w[25][25][25];int dfs( int a, int b, int c){ if( a <= 0 || b <= 0 || c <= 0) return 1; if( a 阅读全文
posted @ 2012-04-11 09:44 找回失去的 阅读(157) 评论(0) 推荐(0)
POJ 1050 To the Max
摘要:这是一道求最大子矩阵和的题,之前做过求最大一维数列连续和,所以可以将每列压缩到一列,将二维变成一维,这样枚举所有的情况,找到一个一维最大连续和即可。/* Accepted 216K 32MS C++ 775B 2012-04-11 09:05:12 */#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 105#define max(a, b) ( a > b ? a : b)const int inf = 0x3f3f3f3f;int t[MAXN][MAXN], a[MAXN 阅读全文
posted @ 2012-04-11 09:13 找回失去的 阅读(172) 评论(0) 推荐(1)
POJ 2226 Muddy Fields
摘要:这道题是最小点覆盖的题,用最少的木板将泥地覆盖。我们建图时将横的线段看成二分图的X点,将竖线段看成Y点。将每个横线段和竖线段编号,编号之后将有交点的横线段和竖线段连一条边,求出最大匹配。最小点覆盖=最大匹配。/*Accepted 2440 KB 16 ms C++ 2186 B 2012-07-28 16:18:28*/#include<cstdio>#include<cstring>#include<cstdlib>const int MAXN = 55;int xM[MAXN * MAXN / 2], yM[MAXN * MAXN / 2];bool g 阅读全文
posted @ 2012-04-05 23:59 找回失去的 阅读(359) 评论(0) 推荐(0)
POJ 3020 Antenna Placement
摘要:http://poj.org/problem?id=3020 无向图的最小路径覆盖,问我们每两个相邻的城市可以共用一个无线,最少要多少个无线设备。我们将每个城市编号,相邻的城市连一条边,每个城市都是X中的结点也是Y当中的结点,求出最大匹配后,利用无向图最小路径覆盖的公式:顶点数 – 最大匹配 / 2 = 最小路径覆盖。/*Memory: 976K Time: 16MSLanguage: C++ Result: Accepted*/#include<cstring>#include<cstdio>#include<cstdlib>const int MAXD 阅读全文
posted @ 2012-04-04 17:01 找回失去的 阅读(190) 评论(0) 推荐(0)
POJ 2594 Treasure Exploration(允许路径重叠的最小路径覆盖)
摘要:http://poj.org/problem?id=2594 允许路径重叠的最小路径覆盖,将连通的点(有向)都连成边,这个用floyd来处理,再用匈牙利算法求出最大匹配,最后用公式求出最小路径覆盖。 公式: 顶点数 – 最大匹配 = 最小路径覆盖。/*Memory: 428K Time: 782MSLanguage: C++ Result: Accepted*/#include<cstring>#include<cstdio>#include<cstdlib>const int MAXD = 505;int n, m;bool map[MAXD][MAXD] 阅读全文
posted @ 2012-04-04 16:24 找回失去的 阅读(209) 评论(0) 推荐(0)
POJ 3041 Asteroids (最小点覆盖)
摘要:http://poj.org/problem?id=3041给一个N*N的矩阵,有些格子有障碍,要求我们消除这些障碍,问每次消除一行或一列的障碍,最少要几次。这里将每行x看成一个X结点,每列Y看成一个Y结点,障碍的坐标x,y看成X到Y的一条边,构建出图后,就变成了找最少的点,使得这些点与所有的边相邻,即最小点覆盖问题。又继续敲了一遍匈牙利算法…/*Memory: 424K Time: 47MSLanguage: C++ Result: Accepted*/#include<cstdio>#include<cstring>#include<cstdlib>#d 阅读全文
posted @ 2012-04-04 13:59 找回失去的 阅读(2714) 评论(0) 推荐(2)
POJ 1679 The Unique MST
摘要:求出次小生成树与最小生成树比较,如果相等则不唯一,否则输出最小生成树的权值。这道题整整花了两个小时的时间,用的是prim算法,用Tlink记录边是否在MST中,然后枚举不在树中的边,用其权值w[u][v]代替max[u][v]。max[u][v]是MST中连结两点u,v唯一的路中权值最大的那条边的权值。/*Memory: 272K Time: 0MSLanguage: C++ Result: Accepted*/#include<cstdio>#include<cstring>#include<cstdlib>const int inf = 0x3f3f3f 阅读全文
posted @ 2012-04-04 11:55 找回失去的 阅读(288) 评论(0) 推荐(0)
POJ 1469 COURSES
摘要:这道题要我们找到p门课和n个学生是否存在一种关系,即在一个集合中的学生,每人代表一门课,每门课在这个集合中也有一个代表。求的的最大匹配数是否等于课程总数。#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 305bool map[105][MAXN], vis[MAXN];int link[MAXN];int p, n;bool dfs(int u){ int v; for( v = 1; v <= n; v++) if( map[u][v] && !vis[v] 阅读全文
posted @ 2012-04-03 22:06 找回失去的 阅读(168) 评论(0) 推荐(0)
POJ 1422 Air Raid
摘要:http://poj.org/problem?id=1422题意:派一些伞兵去那个镇里,要到达所有的路口,有一些或者没有伞兵可以不去那些路口,只要其他人能完成这个任务。每个在一个路口着陆了的伞兵可以沿着街去到其他路口。我们的任务是求出去执行任务的伞兵最少可以是多少个。一个路径覆盖的问题:在一个有向图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);同样是求出二分图最大匹配数,代码和刚才的差不多,有这样一个公式 //最小路径覆盖 = 顶点... 阅读全文
posted @ 2012-04-03 16:48 找回失去的 阅读(423) 评论(0) 推荐(0)
二分图最大匹配(转载)
摘要:以下内容转自http://imlazy.ycool.com/post.1603708.html什么是二分图,什么是二分图的最大匹配,这些定义我就不讲了,网上随便都找得到。二分图的最大匹配有两种求法,第一种是最大流(我在此假设读者已有网络流的知识);第二种就是我现在要讲的匈牙利算法。这个算法说白了就是最大流的算法,但是它跟据二分图匹配这个问题的特点,把最大流算法做了简化,提高了效率。匈牙利算法其实很简单,但是网上搜不到什么说得清楚的文章。所以我决定要写一下。最大流算法的核心问题就是找增广路径(augment path)。匈牙利算法也不例外,它的基本模式就是:初始时最大匹配为空while 找得到增 阅读全文
posted @ 2012-04-03 16:09 找回失去的 阅读(198) 评论(0) 推荐(0)
POJ 3230 Travel
摘要:http://poj.org/problem?id=3230 同样是一道DP的题,但是这道题确实想了很久,还是在staginner大牛的提醒下才想出来的,题目给的数据有ex[i][j]从i到j城市的花费,inc[i][j]为第i天在j城市的收入。状态转移方程为:f[i][j] =max( f[i-1][k] + inc[i][j] – ex[k][j] ). 其中f[i][j]代表的是第i天呆在j城所获到的最大收入。再遍历一遍求的的f值就知道m天呆在哪个城市的收入最大了!/*Problem: 3230 User: CSU_ACM1174Memory: 304K Time: 16MSLan... 阅读全文
posted @ 2012-04-02 18:22 找回失去的 阅读(475) 评论(1) 推荐(0)
POJ 1160 Post Office
摘要:http://poj.org/problem?id=1160 这是一道DP的题,用w[i][j]代表用一个邮局覆盖第i个到第j个点所得到的最小距离和。用f[i][j]代表用前i个邮局覆盖前j个点所得到的最小距离和。然后根据这里我们可以推出状态转移方程为:f[i][j] = min( f[i][j ] , f[i - 1][k] + w[k + 1][j] ) ( k < j)./*Accepted 528K 79MS C++ 1195B 2012-08-07 14:23:15*/#include<stdio.h>#include<string.h>#includ. 阅读全文
posted @ 2012-04-02 18:12 找回失去的 阅读(184) 评论(0) 推荐(0)
POJ 3259-Wormholes
摘要:http://poj.org/problem?id=3259 题意大致是N个点,M条正常的边(双向)边权为正,W个虫洞,边权为负,想要我们判断回路中是否存在一个负圈。学习了bellman-ford算法来求负环,松弛结束后判断是否存在最短路,不存在则有负环。#include <stdio.h>#include <string.h>#include <stdlib.h>const int maxn = 1 << 9, inf = 0x3f3f3f3f;int dist[maxn];int N, M, W, es;struct Edge{ int u, 阅读全文
posted @ 2012-04-02 10:58 找回失去的 阅读(231) 评论(0) 推荐(1)
hdu 1874 畅通工程续
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1874 这是一道基础的最短路的题,回顾了dijkstra算法,但是看题的时候有点不仔细,没注意到题目说的a, b之间可能有多条路,所以初始化出了点小问题,导致WA。#include<cstdio>#include<cstring>#include<cstdlib>const int MAXN = 205;const int INF = 0x3f3f3f3f;int d[MAXN], w[MAXN][MAXN];bool vis[MAXN];int n, M, a, b, x 阅读全文
posted @ 2012-04-02 10:01 找回失去的 阅读(135) 评论(0) 推荐(0)