
Uva
南宮逸辰
喜欢听音乐,ACM旅途中
展开
-
Uva-118-Mutant Flatworld Explorers
简单的模拟题,就是给你一系列指令,然后进行模拟操作。代码:#include#include#include#define MAX 10001bool lost[MAX][MAX];int n,m,sx,sy,pos;char s[4];int movey[4]={1,0,-1,0},movex[4]={0,1,0,-1};int GetPos(char op){原创 2013-03-01 13:48:48 · 592 阅读 · 0 评论 -
Uva-167-The Sultan's Successors
这个题属于八皇后问题,只不过需要求出八皇后所在位置的数字和最大值。其实枚举所有情况,也就是8的全排列,但这其中仍有剪枝操作。在搜索过程中应该剪去斜线上不满足要求的情况(有2种)。 还是比较简单,代码:#include#include#include#define MAX 9using namespace std;int map[MAX][MAX],vis[原创 2013-03-02 12:35:39 · 503 阅读 · 0 评论 -
Uva-11729-Commando War
这个题要求求布置并完成所有的工作时间最小,比较容易想到一个贪心策略就是说尽量的让工作的时间长的先布置并执行,因为这样的话尽可能的进行连续性工作。还是比较简单。代码:#include#include#include#includeusing namespace std;struct node{ int w; int t; bool operator<(原创 2013-03-15 09:08:51 · 806 阅读 · 0 评论 -
Uva-11300-Spreading the Wealth
这个题最开始我想的方法比较复杂,后来从书中看到一种比较好的处理方法。大致处理过程如下:首先我们设置每个人最初拥有的金币数为Ai,它给出的金币数为xi,得到的金币数为x(i+1),M表示的是最后平均每个人需要得到多少个,则可以得到如下:对于第1个人,A1-x1+x2=M->x2=M-A1+x1=x1-C1(规定C1=A1-M)对于第2个人,A2-x2+x3=M->x3=M-A2+原创 2013-03-15 10:15:29 · 919 阅读 · 0 评论 -
Uva-11292-Dragon of Loowater
比较典型的贪心题, 尽量找到能力值最小的骑士去杀死恶龙。代码:#include#include#include#include#define MAX 20001using namespace std;int n,m,a[MAX],b[MAX];int main(){ while(scanf("%d%d",&n,&m)&&(n||m)) { for(int原创 2013-03-15 08:57:15 · 596 阅读 · 0 评论 -
Uva-10881-Piotr's Ants
题目求蚂蚁在经过t时间移动后的位置,要求按输入顺序输出。其实蚂蚁碰撞反向的问题可以直接“穿过”,因为蚂蚁移动过程中其相对位置是不会改变的,所以可以当作穿过。只是在处理移动前,需要对蚂蚁所在位置进行排序,并记录当前蚂蚁从左到右的编号(输入顺序),在移动过程结束后再将其进行从小到大排序,然后赋值为刚记录的顺序。最后再以编号排序输出即可。T_T我排了3次序。代码:#include原创 2013-03-15 17:11:50 · 1358 阅读 · 0 评论 -
Uva-10905-Children’s Game
这个题是要求求出所给你的一些数所能组成的最大的数。我用的贪心的方法做的,首先对所有给出的数按照字典序进行排序,然后对每次进行分别讨论处理,其中有一种方式是枚举2个数所组成的数然后取大值。代码:#include#include#include#include#includeusing namespace std;const int maxn=51;string str[ma原创 2013-03-28 22:26:20 · 607 阅读 · 0 评论 -
Uva-11464-Even Parity
这个问将所给m*n的01矩阵,需要求出最少将0变成1的次数,使得所有点的上下左右之和为偶数。有题目的要求可以知道如果对整个地图用DFS的话会超时,而且超时会很严重,而通过观察可以发现后面的几行可以由第一行递推得出。解法:首先用DFS枚举第一行的所有情况,然后对每种情况进行递推后面的变化情况,然后取最小即可。代码:#include#include#include#define原创 2013-03-16 13:12:14 · 1270 阅读 · 0 评论 -
Uva-11210-Chinese Mahjong
这个题是对麻将的一个模拟,要求求出所有可以“听"牌的可能,其实可以枚举所有的牌然后进行搜索看这张牌是否可以成为听牌,而如果拥有着张牌后能够成功的和牌,那么就说明这张牌能够成为听牌。再添加某张牌后,选一个多余或等于2张的牌出来,然后进行进一步搜索判断这张牌是否可以成为听牌。其中还需要注意的是同种牌不能超过4张。代码:#include#include#includeusing n原创 2013-03-16 20:28:55 · 1311 阅读 · 4 评论 -
Uva-11384-Help is needed for Dexter
题意大致为给你一个1,2,3,.....n的序列,每次你可以选择其中的一些数减去一个数,要求求出最少的操作次数,使得所有的数都变为0这个题可以使用2分的方法,将数分为2部门,将后半部分减去中间的数,则使得后面部分与前面部分一致,然后再进行划分即可。代码:#include#includeint main(){ int n; while(scanf("%d",&n)!原创 2013-03-16 20:45:06 · 952 阅读 · 0 评论 -
Uva-10795-A Different Task
汉诺塔类似问题。代码:#include#include#define MAX 101int a[MAX],b[MAX];long long f(int *p,int i,int final){ if(i==0) return 0; if(p[i]==final) return f(p,i-1,final); return f(p,i-1,6-p[i]-fi原创 2013-03-16 23:41:19 · 823 阅读 · 0 评论 -
Uva-11520-Fill the Square
要求在矩形中填入字母序列, 使得其字典序满足最小,个人用谈心策略做的,即当前点总是填入能填的最小字母。代码:#include#include#include#define MAX 11using namespace std;char map[MAX][MAX];int n,movex[4]={0,1,0,-1},movey[4]={1,0,-1,0};bool i原创 2013-03-17 11:09:10 · 693 阅读 · 0 评论 -
Uva-Live Archive3902-Network
一道DFS搜索题,更新的时候需要注意下代码:#include#include#include#include#define MAX 1010using namespace std;vector gr[MAX],node[MAX];int n,s,k,fa[MAX],ans;bool vis[MAX];void DFS(int u,int f,int deep){原创 2013-03-17 14:16:59 · 637 阅读 · 0 评论 -
Uva-1030-Image Is Everything
跟着书上做的~代码:#include#include#include#include#include#includeusing namespace std;char view[8][12][12];char p[12][12][12];int n;void getpos(int k,int i,int j,int l,int& x,int& y,int& z){原创 2013-03-16 11:54:40 · 691 阅读 · 0 评论 -
Uva-Live Archive-3635-Pie
题目地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=1636&mosmsg=Submission+received+with+ID+1205580这个题要求求出将n个圆形蛋糕分为f+1个人的最大面积,要求蛋糕原创 2013-03-17 10:47:37 · 1066 阅读 · 0 评论 -
Uva-11462-Age Sort
这个题其实就是数据量比较大,如果用普通的排序方法根本无法通过测试。而本题有一个特殊性,年龄的区间在我们的生活中可以确定,所以这个题完全可以用基数排序进行解决。代码:#include#include#include#define MAX 110using namespace std;int age[MAX];int main(){ int n; while(原创 2013-03-17 21:30:07 · 895 阅读 · 0 评论 -
Uva-1203-Argus
优先队列的一道练习题, 要求求出工作序列。这个题没有用以前的方法做,而是尽量的用C++的STL,这次尝试性的学着书上用了构造的方法。挺不错的。代码:#include#include#include#includeusing namespace std;struct node{ int num; int t; int time; node(in原创 2013-03-18 11:00:37 · 720 阅读 · 0 评论 -
Uva-11991-Easy Problem from Rujia Liu?
这个题就是给你一个数组,要求查询某个数第某次出现的位置。本来打算用数组模拟实现的,但是书上建议说用map+vector容器来做,感觉的确要简单许多。学习了!在这里也提醒自己, 以后数组可以用vector实现,并不需要担心数组的大小。代码:#include#include#include#include#includeusing namespace std;map原创 2013-03-18 10:40:24 · 759 阅读 · 0 评论 -
Uva-11997-K Smallest Sums
题目要求是从k个数组中各选一个数组成的和中最小的k个。用优先队列做,注意合并的时候可以做一些适当的优化操作,因为最开始已经对每个数组进行了排序,所以每一次更新只需要从当前优先队列中取出第一个数,然后进行更新操作即可。更新为删除当前相加的值,而加上当前值后面的一个值。代码:#include#include#include#include#include#define MAX 7原创 2013-03-18 12:09:02 · 1593 阅读 · 2 评论 -
Uva-11995-I Can Guess the Data Structure!
这个题就是给你2个操作,让你根据这些操作判断这些操作数据哪种类型(队列,栈,优先队列)。用C++ STL模拟一下就可以了,注意可能出现同时满足2种类型以及可能一种都不满足的情况。代码:#include#include#include#include#includeusing namespace std;int main(){ int n; while(sc原创 2013-03-18 10:18:51 · 708 阅读 · 0 评论 -
UvaLive-4254-Processor
用二分法可以做~代码:#include#include#include#include#includeusing namespace std;struct node{ int l,r,w; bool operator < (const node &a)const { return r>a.r; }}a[10001];int n;prio原创 2013-03-31 14:27:46 · 1128 阅读 · 0 评论 -
Uva-1160-X-Plosives
比较简单的一道并查集练习题代码:#include#include#include#define MAX 100001using namespace std;int p[MAX],ans;int find(int x){ if(p[x]==x) return x; return p[x]=find(p[x]);}int main(){ int a原创 2013-03-18 12:30:33 · 735 阅读 · 0 评论 -
Uva-11078-Open Credit System
这个题要求求出满足i代码:#include#include#define MAX 100001using namespace std;int a[MAX];int main(){ int cas; scanf("%d",&cas); while(cas--) { int n; scanf("%d",&n); scanf("%d%d",&a[原创 2013-03-18 22:39:47 · 969 阅读 · 0 评论 -
Uva-10054-The Necklace
这个题就是求宝石是否可以连接成满足要求的项链,要求相连2的2个石头必须为一样的颜色。其实可以将这个题转化为欧拉路径,即石头2面对应连边。代码:#include#include#include#include#includeusing namespace std;const int maxn=51;int w[maxn][maxn],cnt[maxn];stack x原创 2013-04-02 12:19:07 · 608 阅读 · 0 评论 -
Uva-11624-Fire!
这个题就是说一个迷宫有一个地方着火(F点),火每秒会向上下左右进行蔓延。而你现在处于'J'的位置,要求你求出最少的步数离开迷宫,走到边界外就算离开。其中'#'代表障碍不能通过。解法:用BFS作吧,只是需要处理下火蔓延的情况即可。代码:#include#include#include#includeusing namespace std;struct node{ in原创 2013-04-01 18:42:24 · 662 阅读 · 0 评论 -
Uva-11549-Calculator Conundrum
这个题需要用set进行判重,如果开数组果断会超时,因为初始化,受教了代码:#include#include#include#includeusing namespace std;int next(int n,int x){ if(!x) return 0; long long ita=(long long)x*x; int num[20],cou=原创 2013-03-19 17:12:00 · 603 阅读 · 0 评论 -
Uva-1121-Subsequence
题目大意是说给你一个的整数序列,让你求出最小长度的连续和大于s其实比较简单,类似维护一个连续子序列即可。代码:#include#include#includeusing namespace std;const int maxn=1e6+10;int a[maxn];int main(){ int n,s,pre,sum,ans; while(scanf("%d原创 2013-03-20 12:52:18 · 596 阅读 · 0 评论 -
Uva-11992-Fast Matrix Operations
这个题是一道线段树题,要求进行区间修改设置以及求和。大意是说给你一个矩阵,然后有3种操作:1 x1 y1 x2 y2 val是将矩阵x1 y1 x2 y2的区间内的值全部增加val2 x1 y1 x2 y2 val是将矩阵x1 y1 x2 y2的区间内的值全部设置为val3 x1 y1 x2 y2 求出x1 y1 x2 y2的区间内的和,最大值,最小值。从题目中的描述和要求可原创 2013-03-20 07:23:38 · 1480 阅读 · 2 评论 -
Uva-Live 3905-Meteor
要求求出最多能看到多少流行,计算流行进入和出去的时间,然后排序遍历一次即可。代码:#include#include#include#includeusing namespace std;const int maxn=1e6;int w,h,n,e;struct node{ double t; int type; bool operator < (co原创 2013-03-20 12:24:59 · 703 阅读 · 0 评论 -
POJ-3141-Distant Galaxy
同样题目 Hdu-3695 http://acm.hdu.edu.cn/showproblem.php?pid=3299 Uva-3695 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1696原创 2013-03-20 14:49:44 · 747 阅读 · 0 评论 -
UvaLive-4255-Guess
算是个模拟题吧,先完成对字符串的处理和转换。我用的是DFS进行搜索~代码:#include#include#includeusing namespace std;char map[11][11];int n,ans[11],sum[11];bool DFS(int index){ if(index==n+1) return true; for(int i=-原创 2013-04-02 21:20:35 · 522 阅读 · 0 评论 -
Uva-1401-Remember the Word
参考了下别人的代码,自己的动归没想出来,伤不起。~代码:#include#include#includeusing namespace std;const int mod=20071027;const int maxn=500010;struct Trie{ int ch[maxn][30]; int val[maxn]; int sz;}t;原创 2013-03-20 19:47:24 · 711 阅读 · 0 评论 -
Uva-11538-Chess Queen
求出公式就好做了,注意用long long代码:#include#include#includeusing namespace std;int main(){ long long n,m; while(scanf("%lld%lld",&n,&m)&&n) { if(n>m) swap(n,m); long long ans=0; an原创 2013-03-20 21:16:30 · 484 阅读 · 0 评论 -
Uva-11732-strcmp() Anyone?
Trie的一道练习题,但是好像不太像普通的实现方式,受教了。题目要求求出两两相比较的最少值。代码:#include#include#includeusing namespace std;const int maxn=4100000;struct Trie{ int head[maxn]; int nxt[maxn]; char ch[maxn];原创 2013-03-21 14:19:55 · 680 阅读 · 0 评论 -
POJ-3517-And Then There Was One
Uva 题目:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1883这个题类似于约瑟夫环,但是由于题目数据比较大,所以只能采用递推的做法。可以通过画图的方法得到转移方程,即dp[n]=(dp[n-1]+k)%n最后仅仅是需要原创 2013-03-21 20:11:19 · 564 阅读 · 0 评论 -
Uva-10635-Prince and Princess
题目给你2个序列,要求求出其最长公共子序列。本来打算用LCS做的,但是看了数据发现其会严重超时,后来看了书上的解法,才知道居然可以将LCS转化为LIS做,这样就使得时间复杂度大大的降低了。解法: 由于题目中说明了p序列中的所有元素不会有重复,所以可以对其进行序号编号,即使得其转化为相应的下标值。 在处理q序列的过程中,首先检查在p序列中是否存在该值,若存原创 2013-03-21 20:51:36 · 609 阅读 · 0 评论 -
POJ-1961-Period
uva1328 地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4074这个题要求求出字符串中每个位置的循环序列解法:根据KMP得到的失配图(状态转移图),然后从头到尾遍历一次即可。代码:#include#include#inc原创 2013-03-22 09:08:40 · 473 阅读 · 0 评论 -
Uva-11134-Fabled Rooks
题目要求求出是否可以在nxn的棋盘上放n辆车,要求每辆车不同行不同列,并且第i个车要放在所给定的第i个矩形中。用贪心做,每次尽量放左边的坐标,如果是纵坐标则尽量放下方的坐标,然后不断进行更新操作即可。代码:#include#include#include#include#includeusing namespace std;const int maxn=50001;str原创 2013-04-05 11:03:52 · 1297 阅读 · 0 评论 -
POJ-3287-The Trip, 2007
同样的题在Uva 上面为 Uva-11100地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2041这个题是说给你一列数,让你将他们尽量划分成尽量少的严格递增序列,并不需要保证其初始顺序, 也就是说最后的答案他们的顺序不要求与所给数序列一致(最原创 2013-04-05 14:27:58 · 1104 阅读 · 0 评论 -
Uva-11627-Slalom
书上的翻译错了~唉,后来借助网上某位朋友的博客,才知道书上的错误,用二分做~代码:#include#include#includeusing namespace std;const int maxn=10e4+10;struct node{ int x,y;}a[maxn];int w,v,n;bool Do(int vx){ double x1,x原创 2013-04-05 15:12:23 · 1093 阅读 · 0 评论