- 博客(52)
- 资源 (1)
- 收藏
- 关注
原创 UVa OJ 167
1、就是个八皇后问题的变体,但是刚开始我忘记给max清零以及记错了右对齐输出的格式,WA了2次。 #include#includeusing namespace std;int C[8],a[8][8],max=0;void dfs(int num,int sum){ if(num==8){ if(sum>max) max=sum;
2013-10-29 22:49:20 294
原创 UVa OJ 10012
1、这道题的难点就在于“圆”,圆会相切,圆有大有小,所以要考虑各种情况。2、用回溯法,每次添加一个新圆的时候,这个新圆可能与前面任一个圆重叠,所以要全部扫描一遍,求出位于最右边的圆心位置,存入b数组。3、还要小心两端,每次添加新圆的时候,还要考虑是否和最左边的板重叠,而在计算最右边的板的位置的时候,要注意任何一个圆都可能与之相切。#include#include#include
2013-10-29 22:01:13 332
原创 USACO Number Triangles
1、数字三角形问题,有最优子结构性质,明显是DP。。。一次AC~ /*ID:mrxy564PROG:numtriLANG:C++*/#include#include#includeusing namespace std;int a[1010][1010],d[1010][1010];int dp(int i,int j){ int &ans
2013-10-28 21:25:19 232
原创 USACO Mother's Milk
1、倒水问题的变形,把上一个程序(UVa 10603 Fill)改改就行了,一次AC~/*ID:mrxy564PROG:milk3LANG:C++*/#include#includeusing namespace std;struct node{ int v[3];};int vis[21][21];int cap[3],in[21];
2013-10-27 19:35:01 274
原创 UVa OJ 10603
1、第一次写隐式图搜索,经典的倒水问题,真是非常容易错!不能AC的童鞋就请严格对照我的程序,看看哪里错了吧。2、感觉隐式图搜索的难度在于状态转移以及判重,但是本题的判重比较简单,只要比较a、b杯子里的水量是否分别相同即可(因为总水量一定)。#include#includeusing namespace std;struct node{ int v[3]; i
2013-10-27 19:14:21 337
原创 NOIp2012 寻宝
1、其实我已经做了优化(取模,把带楼梯房间加入队列),但是用Cena测评,最大的一组数据却要1.5s才能过(超过1s),刚在想我怎么越来越长出息了连普及组题目都过不了了,突然想到可能是因为文件太大了输入需要很长时间所以超时了,果不其然交到tyvj上就过了。2、这题就是约瑟夫问题的变形,注意取模的时候要特殊处理,因为“走的房间数”是从1开始编号的。比如说要走过5个带楼梯的房间,但这层楼一共就5个
2013-10-26 22:27:55 511
原创 USACO Arithmetic Progressions
1、通过这道题,我明白了优化的重要性,引入了list后,生生将20+s的程序给优化到不到1s左右了~(大数据尤其明显)2、枚举顺序也很重要,从后往前枚举要更快一些。3、这是博客上的第三百篇解题报告!值得庆祝!撒花~/*ID:mrxy564PROG:ariprogLANG:C++*/#include#include#include#includeusi
2013-10-26 18:23:23 360
原创 UVa OJ 10020
1、最小区间覆盖问题,比较经典,用贪心法解决。2、要注意的是刚开始要判断有没有left0的区间,有再进行搜索,否则会RE。3、搜索到right>=M的区间后立即停止,否则区间数量就不是最小。#include#includeusing namespace std;struct interval{ int l,r; bool operator
2013-10-26 15:58:15 340
原创 Round #208 (Div. 2)A、 Dima and Continuous Line
1、题目链接:http://codeforces.com/problemset/problem/358/A2、昨晚看这道题没有什么思路,所以就没做了,其实就是暴力法,不要去在乎那些点是怎么变化的,而是要有一种全局观,每两个点都会组成一个半圆,只要暴力枚举“所有的半圆对”,再看看是否相交就可以了。相交的条件就是L1 #include #include using namespac
2013-10-26 13:13:08 387
原创 USACO The Clocks
1、这道题在前面TEXT讲解过,可惜我完全忘记了,在那里用IDDFS,果断TLE了。状态的选取非常重要,从9^k到k^9再到4^9,性能得到了巨大的优化!2、今天做了两道IOI题目,感觉收获非常大。/*ID:mrxy564PROG:clocksLANG:C++*/#include#includeusing namespace std;int a[3][3],
2013-10-25 23:00:21 284
原创 USACO Packing Rectangles
1、USACO真是相当重口,才1.4节就给了一道95年的IOI题目,如果不是事先知道用搜索做,而且还有测试数据(21组!)的话,以我的水平,真的很可能做不出来。2、这个程序需要6个dfs,也就是每一种情况都要分别为它写一个dfs,最后一种“田”字型是最难的,要分成四类,刚开始因为思路不清晰在乱做,所以总是WA。一定要注意分类讨论要不重不漏,也就是大于等于的等于号不能少。3、注意,标号为1,
2013-10-25 17:30:43 276
原创 UVa OJ 11987
1、注意对并查集的每个操作都是对代表元进行操作,所以不要忘了在元素外面套个find。2、这里移动点的时候不要实际移动,而是创立一个新结点(给它一个编号),并更新相应信息即可,操作都是对这个新结点进行,而且这个新结点永远不能当代表元。#includeusing namespace std;int n,m,cmd,p,q,pointer;int fa[200010],now[100
2013-10-24 13:38:15 480
原创 USACO Prime Cryptarithm
1、这题很怪,刚开始数组s开成5就一直是运行错,开成6就没问题了。。。2、暴力法,很简单。/*ID:mrxy564PROG:crypt1LANG:C++*/#include#includeusing namespace std;int cnt,in[10];bool is_valid(int num,int bit){ char s[6];
2013-10-23 23:27:41 262
原创 USACO Calf Flac
1、这道题真是相当麻烦,无法预处理,而且数据还可能是好多行。2、刚开始我忽略了回文串可以是偶数,所以WA。3、代码比较乱。注意数组很容易越界,要控制边界。/*ID:mrxy564PROG:calfflacLANG:C++*/#include#include#includeusing namespace std;char s[20010],ch;i
2013-10-23 22:21:27 285
原创 NOIp2010 关押罪犯
1、本题用并查集做,将边从大到小排序,然后看两个端点是否在同一个集合中,如果在同一个集合就输出(贪心法),如果不在同一个集合,或至少有一个还没有分配,则他们两个分配到对立的监狱,注意后面应用find,而不是f[],因为a[i].y+n的集合可能已经在前几轮中被修改过。#include#includeusing namespace std;struct edge{ int
2013-10-22 09:14:06 484
原创 NOIp2010 乌龟棋
1、确实感觉自己的解题水平有很大提升。以前很怕dp,但是这个题一次AC了。其实找准状态就行,状态不是当前到的格子编号(太乱了,不好划分,而且卡片数很难维护),而是已使用的卡片数。用一个四维数组来记录当前最优值即可。#include#include#includeusing namespace std;int n,m,temp,answer,a[360],num[5],d[45]
2013-10-21 21:56:46 421
原创 NOIp2010 机器翻译
1、不会用STL,自己手工写了个循环队列。vis数组的运用可使查找的时间复杂度变成O(1)。#include#includeusing namespace std;int vis[1010],a[110];int main(){ freopen("translate.in","r",stdin); freopen("translate.ans","w",
2013-10-21 20:55:30 516
原创 NOIp2010 三国游戏
1、这题很有意思,在一个博弈的背景下,考察贪心法。我通过分析隐约感觉到是求次大值,但是并没有分析出小涵是必胜的,所以没有得出“求次大值的最大值”算法。真希望这个是自己分析出来的,而不是靠别人的题解来理清思路的。所以说还是要多做一些博弈题,习惯习惯。#includeusing namespace std;int a[510][510];int main(){ freop
2013-10-21 18:42:02 400
原创 NOIp2010 导弹拦截
1、本题很显然用贪心法,我的做法是,先比较某个导弹和哪个拦截点最近,然后导弹就归属于那个拦截点,求出两个拦截点各自能拦截到的最远的导弹,然后将这两个距离相加,测评后只得了40分。2、想出了一个反例。比如两个拦截点在一维数轴上,A在左,B在右,导弹1在A\B间距离A30米距离B31米的地方,导弹2在B右边,距离B40米的地方,按我的算法,答案是50的平方,实际上只是40的平方就可以了,也就是说,
2013-10-21 17:39:49 501
原创 NOIp2012 分解质因数
1、刚开始想到筛法求素数,但是数字太大,数组开不下,所以枚举。2、枚举的方向很重要,从小到大枚举就可以AC,但是从大到小枚举就会超时。#include#includeusing namespace std;bool is_prime(int n){ for(int i=2;i if(n%i==0) return false; return
2013-10-18 13:55:06 427
原创 NOIp2010 接水问题
1、学会了用Cena测评,还是很方便的。2、这题用贪心法,模拟可以做,但效率很低。3、刚开始sort的个数是n个,所以出错了,应该为m个,所以要小心! #include #include #include using namespace std;int main(){ freopen("water.in","r",stdin); freope
2013-10-18 09:45:24 595
原创 NOIp2010 数字统计
1、最近得到一些noip题目的测试数据,想用这些题目来查漏补缺。2、暴力法是可以的,但是用递推更加方便、快捷。#include#includeusing namespace std;int main(){ int L,R,ans; int a[10010]; while(scanf("%d%d",&L,&R)==2){ mem
2013-10-17 21:49:15 346
原创 SRM 594 FoxAndClassroom
1、昨天本来是满课,CF和TC一个都不想参加,但最后犹豫了一下,还是两个都参加了。。。2、这是一道很简单的暴力枚举题,第一次参加TC正式赛,字体很小不习惯,加上刚做完CF很累,AC了这个就没有再开题了。Problem Statement Fox Ciel is now in high school. The seats in her classroom
2013-10-17 20:10:39 335
原创 Round #207 (Div. 2)C、Knight Tournament
1、我发现自己就是一弱智。。。2、首先,这道题线段树可以做(当然很多人用set,我不会),很明显是区间覆盖,但我纠结的是怎么特殊处理那个晋级的人,比赛时写了一小时,也没写出来,后来比赛完了一想,只要把区间分成左右两段分别赋值不就行了么。。。3、写啊写,可是总是WA,我觉得思路没有任何问题,调啊调,调了一晚上,没调出来,郁闷地睡了,第二天在检查N(N大于等于20)遍程序后,发现是数组开小了!
2013-10-17 19:56:19 298
原创 Round #207 (Div. 2)B、Flag Day
1、题目链接:http://codeforces.com/problemset/problem/357/B2、这道题刚开始想用回溯法,非常麻烦,其实仔细一想就知道模拟即可,因为前面已经出现过的人最多在后面出现一次,每一轮至少有两个人的衣服颜色是不确定的,因此不会出现冲突。#include#includeusing namespace std;int a[100010][3],n
2013-10-16 10:35:54 359
原创 Round #207 (Div. 2)A、Group of Students
1、题目链接:http://codeforces.com/problemset/problem/357/A2、这题悲剧了,因为没注意到“each“这个单词。觉得CF某种程度上比OI和ACM更难,因为OI有部分分,ACM没有hack机制,而CF要求一次性通过全部(刁钻的)数据,否则就零分。而且要求两小时过5题,过题速度越快越好,所以说参加CF还是很锻炼人的。 #includeusin
2013-10-16 10:29:40 243
原创 UVa OJ 10048
1、这道题竟是用Floyd算法,很灵活,要不是上网搜题解还真想不到。证明算法导论上有,但我没看懂,一定要抽空再看一看。2、要是网络赛前做了这道题,那道跟这个非常相似的题说不定就做出来了。唉,还需要努力啊!#include#include#includeusing namespace std;const int INF=100000010;int G[110][110];
2013-10-13 22:56:34 268
原创 LA 4481
#include#includeusing namespace std;char s[300];mapchar,int> p;int main(){ p['W']=64;p['H']=32;p['Q']=16;p['E']=8;p['S']=4;p['T']=2;p['X']=1; while(fgets(s,300,stdin)!=NULL){
2013-10-13 19:09:59 258
原创 UVa OJ 11388
1、这道题想明白了就很容易,两个数都要大于等于gcd,而lcm肯定有一个因子gcd,所以答案呼之欲出。#include#includeusing namespace std;int main(){ int T,G,L,num,i; scanf("%d",&T); while(T--){ scanf("%d%d",&G,&L);
2013-10-13 18:47:18 252
原创 NOIp2013 Training Series #1 Xor
1、给出无向图G,边(Ai,Bi)的权是Ci,判断下列性质是否成立:对于任意圈C,其边权的异或和是0。2、这道题看了一点思路都没有,首先什么是异或和?去群里问后,发现就是一系列数的异或。接着就是如何判环。数据量很小,明显dfs可以,但我在实现的过程中犯了三个错误:1、由于是无向图,所以必须记录结点的父亲,否则会循环访问,而且父亲必须是局部变量,是dfs的一个参数。2、异或和sum必须是局部变量
2013-10-13 15:03:39 493
原创 NOIp2013 Training Series #1 Increasing
1、数列a1到an,修改最少的数字,使数列严格单调递增。2、拿到这道题第一个想法是求最长上升子序列,但是很容易举出反例,1,5,4,2,3明显最长上升子序列是1,2,3,但是知道这个没有什么用,1,2之间没有多余的整数给5和4来修改了。难道要分类讨论?太麻烦了。3、看到贴吧里的讨论,终于有了思路:其实,我们所有的要求就是a[j]-a[i]>=j-i,也就是说,如果两个数相差4,那他们中间最
2013-10-13 12:07:34 429
原创 NOIp2013 Training Series #1 Difference
1、数列a1到an,q个询问(L,R),问aL到aR是否互不相同。2、这道题刚拿到就觉得是线段树,但是要维护什么信息?刚开始,我维护了min和max两个信息,但是这只适用于判断aL到aR是否相同,而不能判断是否不同。因为,只要有两个数数值相同,就认为aL到aR是不同的。直到比赛结束,我都没有想出该维护什么信息。后来问了别人,知道应该用一个数组a来保存离第i个数最近的与它数值相同的数的位置j。然
2013-10-13 10:47:52 394
原创 UVa OJ 542
1、这道题考条件概率。。。刚开始temp=(2#include#include#includeusing namespace std;int main(){ //freopen("a.txt","r",stdin); string s[16]; double a[16][16],d[16][5],p,sum; int temp;
2013-10-11 23:43:49 248
原创 UVa OJ 10759
1、刚开始没思路,后来到网上搜题解,发现是用递推的方法。。。嗯,长知识了。。。2、0和1的时候特殊处理,其他情况用gcd即可。#include#includeusing namespace std;long long d[25][150];long long gcd(long long a,long long b){ return b==0?a:gcd(b,a%b
2013-10-10 22:31:50 327
原创 UVa OJ 10491
1、就是条件概率的计算。。。一次AC~生活真美好啊~#includeusing namespace std;int main(){ int ncow,ncar,nshow,ntot,all; double p; while(scanf("%d%d%d",&ncow,&ncar,&nshow)==3){ ntot=ncow+ncar;al
2013-10-10 14:16:33 348
原创 UVa OJ 10105
1、数学题。。。因为涉及求组合数,本以为会出点小状况的,没想到AC得这么容易~#includeusing namespace std;long long fac[15];long long C(int n,int k){ return fac[n]/(fac[n-k]*fac[k]);}int main(){ int n,k,temp; lon
2013-10-09 23:46:10 261
原创 USACO Barn Repair
1、这道题USACO Training前面有讲解,所以不难,就是每次挑“缝隙最小的”堵住就可以了。一次AC~唯一美中不足的是:代码不是很美观。/*ID:mrxy564PROG:barn1LANG:C++*/#include#include#includeusing namespace std;int main(){ freopen("barn1
2013-10-09 21:14:46 327
原创 USACO Mixing Milk
1、基础贪心。。。不难,跟在菜市场买菜一个道理。。。/*ID:mrxy564PROG:milkLANG:C++*/#include #include using namespace std;struct milk{ int p,num; bool operator return p }}a[5010];int
2013-10-07 17:31:52 279
原创 USACO Dual Palindromes
1、有了上一道的铺垫,这个不难,依旧是暴力枚举,一次AC~2、开启新任务咯~/*ID:mrxy564PROG:dualpalLANG:C++*/#include using namespace std;bool is_pal(int *a,int cnt){ for(int i=0;i if(a[i]!=a[cnt-1-i]) ret
2013-10-07 12:11:22 307
原创 USACO Palindromic Squares
1、因为没看清题目要求,WA了好几次。。。囧。。。2、题目还是比较简单的,暴力法判断是否为回文即可,不过不能被假象迷惑,我很清楚到后面章节就要被狂虐了。。。/*ID:mrxy564PROG:palsquareLANG:C++*/#include using namespace std;bool is_pal(int *a,int cnt){ for(i
2013-10-07 11:38:19 227
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人