- 博客(51)
- 收藏
- 关注
原创 UVA 10029 - Edit Step Ladders
/*是最长子序列的变形题 直接做的话会TLE 因为有25000组数据 但是我们可以减少结点数目 通过改变当前单词 在利用二分查找 是否有这个单词 可以减少时间*/#include#includeint d[25010];char str[25010][20];int add(char *t,int pos,char c){ ch
2013-02-27 20:22:39 510
原创 10067 - Playing with Wheels
#include#include#include#includeint first[5],end[5];int vis[20010];using namespace std;struct D{ int d; int p[5];};int hash(int *s){ int temp=0; for(int i = 0
2013-02-27 13:42:38 453
原创 10249 The Grand Dinner
#include#include#includeint min(int a,int b){ return a>b?b:a;}struct S{ int id,x; int c[110];} a[110],b[110];int cmp(const void *a,const void *b){ struct S
2013-02-27 13:42:03 494
原创 10199 - Tourist Guide
/*有关割点的问题*/#include#include#include#includeusing namespace std;char a[110][32];int dfs_clock,pre[210],iscut[210],low[210];vectorg[210];int cmp(const void *a,const void *b){
2013-02-26 23:58:48 423
原创 10120 - Gift!
/*这是个数学规律的题 n》49的时候 全部可以let 在此附加推导过程的链接http://www.algorithmist.com/index.php/UVa_10120惭愧..看了好久没看懂*/#include#includeint a[100],b[100],n,m;int judge(int *s){ for(int i =
2013-02-26 18:04:01 694
原创 11389 - The Bus Driver Problem
/*简单的贪心问题, 要求出最小的额外支出 只需要 一个正序一个逆序就可以*/#include#include#includeint n,d,r;int a[110],b[110];int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}int cmp1(con
2013-02-26 13:30:20 445
原创 11714 - Blind Sorting
/*这是关于第K大数最小比较次数的一个题一个序列 : 数两两比较 大的进入下一层 形成一个堆 这样 得到最大数至少需要n-1次寻找第二大的数 只需要比较那些 与最大数比较过的数 也就是每层有一个数 (除去最后一层)需要(int)log2(n-1)次 。*/#include#includeint main(){ int n; whil
2013-02-26 00:37:09 553
原创 UVA 1346 - Songs
/* 这是一个贪心的题目,要求求出最小的sum = b1+..+bn ,bi= fi*(a1+..+ai);假设以求出最小的sum 得到了最优序列 那么 bi+b[i+1] = fi*(a1+..ai) + fi+1*(a1+..+a[i+1])sum1 = (a1+..ai-1)*(fi+f[i+1]) + f[i+1]*a[i+1]+ f[i+1]*a[i] + fi*a
2013-02-25 20:30:46 870
原创 UVA 1368 - DNA Consensus String
/*字符串类的水题, 就是给m个DNA序列, 让你找出一个DNA序列 这个序列要求 跟给的m个序列不同之处最小,也就是最相似*/#include#includechar DNA[51][1010],s[1100];int pos[4]= {0,2,6,19},m,n,d[1100];int main(){ int t,pd[26]; sc
2013-02-25 16:56:05 4256
原创 UVA 1339 - Ancient Cipher
/*水题,只是题意有点难懂, 就是判断2个字符串之间是不是有变化关系 任意一个字母都会有不同的变化,最后变成另一个字符串。但不同的2个字符 不会变成同一个字符,也就是说 字符变化没有明确的规律 所以只需要判断每个字符出现的次数就行,2个次数序列比较下就可以,*/#include#include#includechar a[110],b[110];int pa
2013-02-25 16:35:25 2317
原创 UVA 11039 - Building designing
/*水题,题目大意就是 给出一组数 要求从大到小排列 但是相邻的2个数 必须是异号 问:这个序列最多能排多少个数?很简单 去掉符号排序,然后一个循环判断符号就可以*/#include#include#includestruct Bu{ int size; int color;} a[500010];int cmp(cons
2013-02-23 22:14:14 391
原创 UVA 11636 - Hello World!
/*LRJ新书的第一题,是个水题,不过还是因为输入方式的问题导致了TLE。。这题打表跟直接算 所耗的时间是一个样的。(经验证)*/#includeint copy[100];int main(){ int n; copy[0] = 1; for(int i = 1; ; i++) { copy[i
2013-02-23 21:56:51 385
原创 10881 - Piotr's Ants
/*这题是新白书上的例题 看了上面的做法 我想了好久才想明白。首先在距离的概念上 2个蚂蚁相遇 掉头 等于 对穿而过。所以在距离上可以直接计算终态但每只蚂蚁位置的ID会变化,所以在这个问题上我纠结了很长时间才明白第i个蚂蚁无论怎么走还是在第i个位置上 如:第i个蚂蚁往右走 若遇到第i+1个 会掉头,还是在第i个位置同理往左走也一样, 所以只需要记录蚂蚁的初始位置就可以。
2013-02-21 18:59:47 318
原创 UVA 11464 - Even Parity
/*我采用的是白书上的枚举方法。 枚举第一行 2^15种可能, 根据第一行计算出后面行的可能存在方式。然后与输入的进行比较。*/#include#include#define INF 1int n,a[20][20];int min(int x,int y){ return x}int check(int s){ int b[20][
2013-02-18 23:04:05 463
原创 UVA 11384 - Help is needed for Dexter
/*算是一个简单 是数学规律吧 如 : 123456 最简单的步骤是456减4 得123012 然后 223 减2 得101010 再减一得000000可以看的出来 n=6时 只需要一步就可以达到n=3的状态 123012 所需的步骤与3相同 不是么~?所以可以得出简单的规律 递归代码如下。*/#include#includeint f(int n){
2013-02-18 21:31:45 823
原创 UVA 11520 - Fill the Square
#include#includechar g[11][11];int n;int judge(int x,int y,char c){ if(g[x+1][y]==c&&x return 0; if(g[x-1][y]==c&&x>0) return 0; if(g[x][y+1]==c&&y
2013-02-18 21:15:43 501
原创 10271 - Chopsticks
/*逆序输入、DP*/#include#include#define INF 1int a[5010],d[1100][5100];int min(int a,int b){ return a>b?b:a;}int main(){ int t,k,n; scanf("%d",&t); while(t--)
2013-02-18 19:12:23 373
原创 11300 - Spreading the Wealth
/*利用中位数求解*/#include#include#include#includelong long a[1000001],c[1000001];using namespace std;int main(){ int n; while(scanf("%d",&n)==1) { long long M=0;
2013-02-17 16:20:41 457
原创 1388 - Graveyard
/* 一定有一个不移动的点 作为坐标原点,再计算需要移动的点*/#include#include#includeint main(){ int n,m; while(scanf("%d%d",&n,&m)==2) { double ans = 0; for(int i = 1; i {
2013-02-17 16:15:30 389
原创 UVA 11729 - Commando War
/*这题是一个简单的贪心问题,J从大到小排序可得最优解 */#include#includeusing namespace std;struct War{ int b,j;}a[1010];bool cmp(War p,War q){ return q.j}int main(){ int n,cas=0;
2013-02-15 19:13:02 375
原创 UVA 11292 - Dragon of Loowater
/*很简单的一个题, 从小到大排序,只要骑士x大于等于龙的y 就+x;每个骑士只能雇用一次*/#include#include#includeint a[20010],b[20010];int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}int main
2013-02-15 18:45:26 272
原创 UVA 1315 - Crazy tea party
/* 一个正序圆圈变成一个逆序圆圈 所需的最小步骤, 在纸上模拟一下过程就能得出最佳答案。*/#include#includeint min(int a,int b){ return a>b?b:a;}int main(){ int t,num,n; scanf("%d",&t); while(t--) {
2013-02-15 18:32:53 788
原创 UVA 10746 - Crime Wave - The Sequel
/*题意 : n个银行 m个警察 要求每个银行都有警察过去 可以想象成二分图来解决二分图的最优匹配 求出最小权值 KM算法即可*/#include#include#includeint n,m;double w[30][30];double lx[30],ly[30],slack;int left[30],r[30];bool s[30],t[30];
2013-02-14 21:41:13 528
原创 hdu 1083
/* 二分图匹配, p门课程n个学生 找出p个学生代表 不能有重复的 这是我对题意的理解也就是X Y 点集一一对应*/#include#includeint p,n; // ke数 点数int g[410][410],vis[410],pr[410];bool SP(int u){ int v; for(v = 1; v
2013-02-14 15:51:50 288
转载 二分图最大匹配算法
二分图的最大匹配就是要在二分图的边集E中找到一个子集S,使S中的任两条边没有公共顶点,且|S|达到最大。二分图有很多实际应用,如工作分配问题。同时二分图最大匹配问题又可以转化成“最小顶点覆盖”、“最小路径覆盖”、“最大独立集“等问题,因此显得非常重要。下面就介绍二分图最大匹配算法。二分图最大匹配可以转换成最大流问题来解。假设二分图的两个顶点集分别为X, Y,那么我们在图中添加一个源s,和一
2013-02-14 14:58:30 916
转载 二分图最大匹配(匈牙利算法)
二分图最大匹配(匈牙利算法) 这两天自学了一下二分图的最大匹配(匈牙利算法)的算法,现在稍微总结一下。(1)前提说明:(用到的定义说明)1。二部图: 如果图G=(V,E)的顶点集何V可分为两个集合X,Y,且满足 X∪Y = V, X∩Y=Φ,则G称为二部图;图G的边集用E(G)表示,点集用V(G)表示。2。匹配: 设M是E(G)的一个子集,如果
2013-02-14 14:38:06 622
原创 10258 - Contest Scoreboard
#include#include#includestruct B{ int ok;//参赛标记 int num,time,name;// 题数 时间 队名 //int pt;// 罚时 int vis[10][5]; // 题目AC标记 时间 罚时 0 1 2} a[110];struct C{ int time
2013-02-12 22:20:54 448
原创 UVA 10315 - Poker Hands
/*我去! 挑战编程上的神题! 写了500行 调试了3小时艰难AC! */#include#include#includeusing namespace std;struct S{ char v1,s; int v;} a[6],b[6];int cmp(S x,S y){ return x.v>y.v;}int
2013-02-11 23:17:18 382
原创 UVA 10205 - Stack 'em Up
#include#includeint map[110][60];char suit[10][20] = {"Clubs","Diamonds","Hearts","Spades"};char value[15][10] = {"2","3","4","5","6","7","8","9","10","Jack","Queen","King","Ace"};int ma
2013-02-11 00:02:03 382
原创 UVA 11198 - Dancing Digits
/*刘汝佳的四个神题之一, 就是一个bfs+hash判重的最短路问题。*/#include#include#includeint a[10],prim[110];int head[1001000],next[1001000];struct S{ int step; int s[10];} q[1001000];int judg
2013-02-10 20:09:05 316
原创 UVA 10624 - Super Number
/* 刘汝佳的神题啊 2796ms擦边AC....*/#include#includeint n,m,flag;char s[40],tp[40];int judge(int x){ int temp=0; for(int i = 0; i { temp = temp*10+s[i]-'0';
2013-02-07 18:11:18 460
原创 UVA 10391 - Compound Words
/* hash的一个题 偷懒用的map做就是找由2个字典单词组成的 单词*/#include#include#include#include#include#includeusing namespace std;map vis;char s[120100][110];int solve(int n){ for(i
2013-02-07 16:05:35 402
原创 hdu-1269
/*强连通分量 模板题 tarjan算法写的*/#include#include#include#includeusing namespace std;int scc[100100],m,n;int dfn[100100],low[100100],times,ma,mb,scc_cnt;stack q;vector map[100100];int dfs
2013-02-07 14:24:26 325
原创 hdu-1103
/*其实就是一个优先的问题,直接模拟的*/#include#include#includeint cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}int main(){ int num[40],str[40][1100]; while(scanf("%d %
2013-02-07 14:22:46 663
原创 hdu1030
/*数学规律,第一种方法:找3种层数之差加起来 横向 左斜 右斜 第二种: 找出上面的点 的辐射范围*/#include#include#include#includeint main(){ int m,n; while(scanf("%d%d",&m,&n)==2) { int temp; i
2013-02-07 14:21:24 337
原创 hdu1007最近点对
#include#include#include#include#includeusing namespace std;struct D{ double x,y;} a[100100];int tmp[100100];double cmp(D a,D b){ return a.x}double cmpy(int p,i
2013-02-07 14:19:13 319
原创 UVA 10129 - Play on Words
/*找欧拉路,先判断图是否连通,*/#include#include#includeint numf[30],nume[30],vis[30];int map[30][30];int dfs(int x){ vis[x]=0; for(int i=0; i if(vis[i]&&map[x][i])
2013-02-07 14:17:02 1117
原创 UVA 10047 - The Monocycle
/* 四维的BFS */#include#include#include#includeusing namespace std;int n,m,flag;int d[5][5]= {{-1,0},{0,1},{1,0},{0,-1}};char map[30][30];int vis[30][30][30][30];struct node{
2013-02-07 14:14:07 287
原创 UVA 705 - Slash Maze
/*判环的个数 和最长路径 这个题需要将输入的 / \ 转化 ‘\’ 为200 ‘/’为 001 020 010 002
2013-02-07 14:12:55 316
原创 UVA 532 - Dungeon Master
/* 简单的六方向bfs*/#include#include#includeusing namespace std;int l,r,c;int ex,ey,ez,max1,count,ok;char map[110][110][110];int vis[110][110][110];int d[4][6]= {{0,0,0,0,1,-1},{0,0,1,-1
2013-02-07 14:09:45 277
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人