
uva
文章平均质量分 57
moyan_min
这个作者很懒,什么都没留下…
展开
-
1400 - "Ray, Pass me the dishes!"
第一次做线段树题目,确实一点也不会,想了很久,首先是线段树怎么作用,每一步会产生什么影响。首先,线段树的每次更新都更新了什么,为什么要这么更新,尤其是更新的区间,虽说原理很简单,就是要么在左子树,要么在右子树,要么兼顾左右子树,所以如果是在左子树,那就查找左子树,否则右子树,或者左右子树都查找,再合并左右子树,这仅是对于查找而言的。那么建树是怎么回事呢,首先建树必然会包括所有情况,每种情况事原创 2013-10-07 20:37:31 · 1454 阅读 · 0 评论 -
11992 - Fast Matrix Operations
要wa死了,书上的代码没太看懂,就按照自己的想法写的,其中掺杂了书上的一些代码居然不对,唉……#include #include #include #include #include #include #include #include #include #include #define INF 0x7fffffff#define N 10010#define M 1原创 2013-10-10 23:24:34 · 1103 阅读 · 2 评论 -
133 - The Dole Queue
#include #include #include #include #include using namespace std;int main(){ //freopen("a.txt","r",stdin); int n,k,m,i,flag,sum; while(cin>>n>>k>>m) { if(n+k+m==0)break;原创 2012-09-11 08:56:28 · 381 阅读 · 0 评论 -
127 - "Accordian" Patience
#include #include #include #include #include using namespace std;typedef struct{ char c[2];} Stk;typedef vector v;bool judge(Stk a,Stk b){ if(a.c[0]==b.c[0]||a.c[1]==b.c[1])原创 2012-09-11 08:54:49 · 457 阅读 · 0 评论 -
112 - Tree Summing
交啦好几次运行错误,原来是数组开小了,快哭死了,本体没别的难点,就是建一个简单的二叉树,然后用递归取值就行了,如果学的比较好的话可以不建树就能做 #include #include #include #include using namespace std;int N,flag; struct p{ int pri; p *left,*right;} ;p原创 2012-09-11 09:06:04 · 477 阅读 · 0 评论 -
10305 - Ordering Tasks
描述:完全是刘汝佳书上的拓扑排序,一点都没有变化,不过可能测试样例的输出与自己测试输出不一样,不过没有事,只要满足一种符合条件的输出就可以#include #include #include using namespace std;int flag,n,m;int topo[110],num[110],s[110][110];bool dfs(int site){ num原创 2012-10-29 19:37:02 · 607 阅读 · 0 评论 -
10054 - The Necklace
描述:这道题还是依靠欧拉回路才完成的,只不过这道题要完成一条循环链,相当于一个圆,然后依次输出就可以了,所以任何数字必须呈现偶数才可以#include #include #include using namespace std;int s[55][55];void dfs(int site){ for(int i=1; i<=50; i++) if(s[si原创 2012-10-28 18:13:50 · 630 阅读 · 0 评论 -
10129 - Play on Words
描述:题意就是通过每行字符的第一个字母和最后一个字母看是否能够连成一串,我才用了欧拉回路判重的方法,不过要事先解决好是否能够构成回路,也就是说出度和入度问题,出度和入度如果完全相同,那么随便找一个点进行欧拉回路就可以;如果入度与出度相差超过了2(包含2),那么肯定无法来成一串;并且最多只能有两个节点的入度和出度分别呈现1和-1(要么没有),才可以连成一串。明白了这些后,然后就可以写代码了,希望你能原创 2012-10-28 17:06:30 · 462 阅读 · 0 评论 -
10047 - The Monocycle
描述:才用bfs和优先队列就可以了,就是从起点走到终点,只不过起点与终点时与地面接触的颜色相同罢了,不过还要用到四维数组了,然后就可以AC了代码一:#include #include #include #include using namespace std;struct Graphs{ int x,y,time,direction,color; frie原创 2012-10-26 00:07:12 · 697 阅读 · 0 评论 -
11210 - Chinese Mahjong
描述:麻将题目,其实就是判断麻将是否能不能胡的问题,不过要注意麻将每张牌只能重复四张,而且麻将牌中出现三个重复时要考虑一下是否直接剔除#include #include #include #define NX 1000003char str[14][6];char temp[][6]= {"DONG","NAN","XI","BEI","ZHONG","FA","BAI"};int原创 2013-03-10 17:37:02 · 917 阅读 · 0 评论 -
11218 - KTV
描述:直接暴就可以了#include #include #include #define N 100003int num[1010][4],s[11];int n,sum,m=1;void dfs(int cur,int count){ int x=0; for(int i=1; i<=9; i++) if(!s[i]) {原创 2013-03-06 11:03:56 · 1014 阅读 · 0 评论 -
10125 - Sumsets
描述:哈希处理就可以了#include #include #include #define N 1000010#define M 1010int cmp(const void *p1,const void *p2){ return *(int *)p1 - *(int *)p2;}int num[M],head[N],next[N];long long sum[N][原创 2013-03-04 16:44:54 · 562 阅读 · 0 评论 -
140 - Bandwidth
描述:好坑人的题,主要是这道题存在这样的数据A:B;B:CE;CG:D;D:E;E:F;F:G;G:H;H:A,结果好几次wa……#include #include #include int count,len,sum,max;int score[27],flag[27],out[27],num[27][27];char s[200];void bandwidth(){ i原创 2012-11-27 11:00:10 · 730 阅读 · 0 评论 -
729 - The Hamming Distance Problem
描述:和前面的几道水题一样,还是两种代码,使用库函数的话耗时比较少一点,用刘汝佳的生成可重集排列的方法耗时多,没什么难度代码一:#include #include #include #include using namespace std;int main(){ //freopen("a.txt","r",stdin); char s[20];原创 2012-11-06 11:03:14 · 684 阅读 · 0 评论 -
310 - L--system
描述:题意很简单,不过要是想要通过看题明白确实挺麻烦的,就是给你一个开始字符串w和最终字符串z,字符串中只有a与b,如果遇到a就替换成第一个字符串,遇到b就替换成第二个字符串,问这样的替换方式能否构成一个形如 xzy 的字符串(x,y,可为空);#include #include #include #include #include using namespace std;#defi原创 2012-12-26 15:41:03 · 700 阅读 · 0 评论 -
208 - Firetruck
描述:用dfs求路径,单纯的回溯是无法通过的,会超时,需要优化一下,然后才能过#include #include #include int n,max,route,len;int num[110][110],score[110],flag[110],str[110];int cmp(const void *p1,const void *p2){ return *(int *)原创 2012-11-28 19:48:04 · 526 阅读 · 0 评论 -
592 - Island of Logic
自己想了好长时间也没有想出来该怎么做,看到别人代码也有些不懂,惭愧……下面是转载的别人的代码:人数最多只有5个人,加上时间,所以可以用6个循环枚举所有的情况。 输入的时候可以根据某个特定的字符去判断这个陈述的内容,比如带有'd'的是'divine'。 判断该陈述是否合法还要结合说话人的身份去判断。如果所有的陈述都合法,那么枚举的这种情况是可能的,把它保存下来,枚举完所以情况后再进行判断转载 2012-11-09 15:44:32 · 449 阅读 · 0 评论 -
10167 - Birthday Cake
描述:我是完全把圆边缘的点都算出来,放到一个数组里,然后查询就可以了#include #include #include #include using namespace std;int num[1010][2],s[100010][2];int main(){ //freopen("a.txt","r",stdin); int n,i,j; for(i=原创 2012-11-02 16:26:05 · 577 阅读 · 0 评论 -
216 - Getting in Line
描述:水题,就不解释了……#include #include #include #include using namespace std;double count;int n,step[10];void dfs(int cur,double sum,int *flag,int (*p)[10]){ if(cur>n) { if(sum<count原创 2012-11-13 00:59:54 · 653 阅读 · 0 评论 -
10148 - Advertisement
描述:区间选点问题,刘汝佳书上有这题,自己看看就会了#include #include #include int s[1010][2];bool str[20010];int cmp(const void *p1,const void *p2){ if(((int *)p1)[1] > ((int *)p2)[1]) return 1; else if(((int *原创 2013-04-03 16:06:11 · 746 阅读 · 0 评论 -
10602 - Editor Nottoobad
描述:以第一个字符串为贪心对象,在其他字符串中寻找一个与此字符串从字符串下标开始匹配最多的字符串,如果在匹配过程中存在不相符的,那么前面这些匹配成功的就不需要再次不输入,也就是说这些部分在press时就不需要了,只需要press以后不匹配的就可以了,然后在意这个字符串为贪心对象,以此类推即可#include #include #include int cmp(const void *p1,原创 2013-03-24 15:02:56 · 734 阅读 · 0 评论 -
10763 - Foreign Exchange
描述:很简单的一道题目,直接AC就可以了#include #include #include #include int str[500010][2];int cmp(const void *p1,const void *p2){ if(((int*)p1)[0]==((int*)p2)[0]) { if(((int*)p1)[1]>((int*)p2)原创 2013-03-11 19:12:32 · 1036 阅读 · 1 评论 -
11100 - The Trip, 2007
描述:大包套小包,最后会剩下几个包,而且剩下包的数量所包含的包的数量尽量平均,其实开始输入的包的数量最多的就是最后剩下的包的数量,然后依次递增这个数量输出就可以了#include #include #include #define N 10010int cmp(const void *p1,const void *p2){ return *(int *) p1 - *(int原创 2013-03-29 17:08:52 · 721 阅读 · 0 评论 -
10020 - Minimal coverage
描述:问题就是刘汝佳书上的的区间选择问题,如果不会的话就看看书吧#include #include #include int n,m;int cmp(const void *p1,const void *p2){ int a=((int *)p1)[0],b=((int *)p1)[1],c=((int *)p2)[0],d=((int *)p2)[1]; if(a<0原创 2013-03-21 14:59:46 · 646 阅读 · 0 评论 -
10487 - Closest Sums
描述:水题,不解释#include #include int num_n[1000],num_m[30],count[30];int n,m,flag,sum=1;int main(){ //freopen("a.txt","r",stdin); while(scanf("%d",&n)!=EOF) { if(!n) break;原创 2013-03-15 00:07:51 · 759 阅读 · 0 评论 -
11151 - Longest Palindrome
描述:计算存在的最长回文串长度#include #include #include int n,sum;char str[1010];int v[1010][1010];int max(int x,int y){ return x>y?x:y;}int dp(int x,int y){ if(v[x][y]) return v[x][y]; if(x=原创 2013-05-24 17:04:10 · 574 阅读 · 0 评论 -
10401 - Injured Queen Problem
描述:晕了,因为读入字符串时用gets读入的,所以一直错,可是用scanf读入却对了,无语。题意是有一个字符串,字符串的长度len表示有一个len*len的矩阵,?表示在这一列的人一行可以放一个皇后,皇后只能攻击一列和周围把个地方的目标,数字及字母是十六进制,用n表示,表示在这一列的第n行必须有一个皇后,也就是说这一列已经确定了只会有这一个皇后#include #include #inclu原创 2013-05-23 14:08:08 · 865 阅读 · 0 评论 -
10201 - Adventures in Moving - Part IV
描述:i表示第几个加油站,j表示在第i个加油站时剩余的油量,k表示在第i个加油站要加的油量#include #include #include int v[110][210],arr[110][2];int min(int x,int y){ return x>y?y:x;}int main(){ // freopen("a.txt","r",stdin);原创 2013-05-18 14:50:02 · 675 阅读 · 0 评论 -
10271 - Chopsticks
描述:题意很简单,就是需要选取(A-B)^2,的最小值和,而且C必须是最大的,那么可以把A与B捆绑在一块,然后选取C即可,i*3则可以消除筷子对数不与i-1相同的情况,因为要选取K+8个,所以外层循环K+8次就行#include #include int n,k,t;int v[1010][5005],arr[5005],s[5005];int min(int x,int y){原创 2013-05-11 19:23:23 · 773 阅读 · 0 评论 -
10029 - Edit Step Ladders
描述:字符串有点大,直接用动规的话25000^2肯定会超时,所以需要动规+二分/哈希,我的代码是采用二分,这样的话,不超过2s就可以过了#include #include #include char str[25010][18];int v[25010];int n,sum;void dic(int x,char *p){ int first=x+1,last=n-1,t;原创 2013-05-21 18:13:00 · 906 阅读 · 0 评论 -
10534 - Wavio Sequence
描述:由于数组会到10000,所以普通的记忆化搜索会超时,需要改进一下#include int n,sum,len;int v[10010][2],arr[10010],s[10010];int min(int x,int y){ return x>y?y:x;}int max(int x,int y){ return x>y?x:y;}int cal(int原创 2013-04-18 19:08:42 · 563 阅读 · 0 评论 -
10306 - e-Coins
描述:刚开始没看懂题目,原来是要凑出一个数(x,y),使得x^2+y^2==s^2#include #include int v[310][310],arr[45][2];int pow_two(int x,int y){ return x*x+y*y;}int main(){ // freopen("a.txt","r",stdin); int n,m,t,原创 2013-04-26 14:26:48 · 821 阅读 · 0 评论 -
10130 - SuperSale
描述:水题不解释#include #include int t,n,m,sum,p,q;int arr[1010][2],w[110],v[50010][2];int main(){ // freopen("a.txt","r",stdin); scanf("%d",&t); while(t--) { scanf("%d",&n);原创 2013-04-12 16:26:28 · 690 阅读 · 0 评论 -
348 - Optimal Array Multiplication Sequence
描述:状态转移方程min(v,dp(x,i)+dp(i+1,y)+num[x][0]*num[i][1]*num[y][1]);数据量只有10,不大,主要是存储步骤#include #include int num[15][2],s[15][15],count[15][15];int dp(int x,int y){ int &v=count[x][y]; if(v) r原创 2013-04-11 21:51:40 · 711 阅读 · 0 评论 -
10405 - Longest Common Subsequence
描述:要命的题,回车也算字符,只要是字符就要算才行,绝不能用scanf读取字符串#include #include #define N 1010char str[N],s[N];int num[N][N];int main(){ // freopen("a.txt","r",stdin); while(gets(str)) { gets(s);原创 2013-04-04 15:55:46 · 669 阅读 · 0 评论 -
11181 - Probability|Given
描述:给你n个人,给出每个人会购物的概率,然后给你r,即r个人会购物其余人都不购物。然后需要你输出n行,第i行就是这个r个人中有一个是第i个的概率是多少 其原型就是,有5个人,选3个人出来,甲在其中的概率。不过5变成了n,3变成了r。这个样子的话就是一个条件概率 即p为从n个人中选r个的概率。t就是甲在其中的概率 t/p就是答案 这个样的话,只能暴力了,即在n个人中找出r个人(就是一个组合,不是排原创 2013-07-26 14:52:33 · 885 阅读 · 0 评论 -
571 - Jugs
描述:算是哈希判重问题吧,不过数据不大,直接用数组标记就行#include #include bool v[1005][1005];char s[6][10]= {"fill A","fill B","empty A","empty B","pour A B","pour B A"};struct Jugs{ int A,B; int pos; int oper原创 2013-06-18 19:36:21 · 783 阅读 · 0 评论 -
10308 - Roads in the North
描述:无根树题目,实际上就是找一条关键路也就是最长路,用dp做#include #include #include using namespace std;typedef struct{ int x,y;} Pair;vector v[10010];int dp[10010],sum;bool vis[10010];void dfs(int cur){ i原创 2013-06-22 09:28:26 · 988 阅读 · 0 评论 -
11029 - Leading and Trailing
描述:后三位用幂取模来做,前三位用log10来做#include #include int pow_mode(int n,int m){ if(m==1) return n; int c=pow_mode(n,m/2); int d=c*c%1000; if(m%2==1) d=d*n%1000; return d;}int main(){原创 2013-06-19 18:45:12 · 707 阅读 · 0 评论 -
10791 - Minimum Sum LCM
描述:将最小公倍数分解质因子,最小的和便为各个质因子的相应次方数之和。 (1)当N是素数的时候,输出N+1 (2)当只有单质因子时或者N不被除尽时,质因子相应次方和+N最后的数;#include #include int main(){ // freopen("a.txt","r",stdin); int n,t=0,count,m,p,q; long long le原创 2013-05-28 21:14:52 · 780 阅读 · 0 评论