- 博客(71)
- 资源 (1)
- 收藏
- 关注
原创 Round #227 (Div. 2)B、George and Round
1、题目链接:http://codeforces.com/contest/387/problem/B2、这道题用贪心法。。。先排序再比较,不想说了。1Y。#include#includeusing namespace std;int a[3010],b[3010],cnt=0;int main(){ int n,m; scanf("%d%d",&n,&
2014-01-31 02:37:35 444
原创 Round #227 (Div. 2)A、George and Sleep
1、题目链接:http://codeforces.com/contest/387/problem/A2、就是考察补码知识,先加个24*60然后再运算,这样更简单,不用讨论,就像高精度减法里的“借位”一样。1Y。 #includeusing namespace std;int main(){ int m1,n1,m2,n2,temp1,temp2; scanf("
2014-01-31 02:35:45 537 1
原创 SRM 605 AlienAndSetDiv2
1、我感觉自己有两个不足,一个是DP水平,一个是C++水平,像标程中用的auto就非常巧妙。。。还有标程对STL的使用非常熟练,可我几乎不行。。。还要努力。2、刚开始毫无头绪,看了标程后才知道应该按顺序去考虑,来设计方程,而不是让思维无序化。其实要是真的对语言熟悉、按顺序考虑,我还不一定做不出来呢。#include #include #include #include #i
2014-01-30 11:55:23 325
原创 NOIp2005 谁拿了最多奖学金
1、记得以前做过这道题。。。当时A了一道水题就很开心很开心。。。有点感慨。。。#includeusing namespace std;struct s{ char name[30]; int num1,num2; char c1[2]; char c2[2]; int num3;}a[110];int score[110]={0};int mai
2014-01-29 21:06:42 317
原创 【清澄OJ】FJ的字符串
1、考察递归。。。简单到不用编译。。。#includeusing namespace std;void generate(int n){ if(n==1) {printf("A");return;} generate(n-1); printf("%c",'A'+n-1); generate(n-1);}int main(){ int n; scan
2014-01-29 20:06:30 460
原创 USACO Factorials
1、做到这么水的题真感动啊。。。刚开始以为要用高精度乘法,吓坏了。。。其实不用,只要保留最后几位就可以了(注意不是保留最后一位),因为可能与两位数相乘的时候,前面进位使得最后为0,要是不保存前几位,乘后的结果就不对了。。。2、还要注意,最后输出的时候只输出一位。。。我刚开始忘了,WA一次。。。/*ID:mrxy564PROG:fact4LANG:C++*/#includ
2014-01-29 16:45:14 272
原创 USACO Stamps
1、这是一道DP,我感觉设计好状态真的很重要,刚开始我的dp【i】是表示“能否凑成数额i”,这就要求一定要等所有面值都算完后,再从头开始搜索看哪个面值不能凑成。比如面值56凑不成,而可能的面值有2000000种,那是巨大的浪费,算法是O(K*K*maxn*N)的,会超时。2、另一种状态是用dp【i】表示“凑成i最少需要的邮票张数”,这样只要把初始值设为INF,然后从头开始递推即可,一旦不满足要
2014-01-29 14:58:14 376
原创 USACO Contact
1、这是98年的一道IOI题目,本来以为要用到KMP,后来发现O(m*n)的算法就可以了。要注意的是0,00,000的二进制值是一样的,为了区分,需要在所有数前面加上一个“1”,这样相当于构建了一个新的映射s->1s,更方便计算(遵循KISS原则:Keep It Simple and Stupid,不要给自己找不痛快)。2、统计完毕后先按照频率排,频率相同按照长度排(这里可以直接按值的大小,想
2014-01-29 12:31:07 819
原创 USACO Shaping Regions
1、呼。。。终于过了这道,考察离散化+线段树的区间修改。因为是零基础,所以专门跑到POJ找了一道相似的题目做(POJ 2528)。。。终于写出来了~2、所谓离散化,就是将无限空间映射到有限区域,通俗一点讲,就是只记录边界线。本题对x和y坐标均离散化,然后枚举x点并更新(合法的)x点对应的线段树(也就是说x要在该操作所包围的范围内),接着统计每种颜色的数量。要注意setv【0】初始值应设为1(表
2014-01-29 00:56:24 365
原创 UVa OJ 10587/POJ 2528
1、经典的离散化题目,用线段树加速。2、离散化就是将无限空间(或很大空间)的点映射到有限区域(或很小区域),说得通俗点就是“只保存我们需要的一些点”,一般指区间端点。具体见注释。#include#include#include#includeconst int MAX=20010;using namespace std;int c,n,ls[MAX];struc
2014-01-28 17:20:33 276
原创 UVa OJ 11297
1、学习一下二维线段树,发现一维的线段树还真是温柔啊。。。仅仅是点修改就这么麻烦了,要是引入标记。。。不敢想了。。。2、挺无语的是照着标程打都会打错,最后实在找不出错,用文件对比软件才找出错误的。。。把o*2+1写成o*2了,静态查错愣是查不出来啊。。。OTZ#includeusing namespace std;const int INF=1const int maxn=20
2014-01-28 02:19:52 258
原创 USACO Humble Numbers
1、这道题还真是考到了我不会的地方。。。实际上就是一个生成合数的过程。将1放在a【0】作为起始数,然后每次在后面跟上合法的生成数(就是“可以生成的”最小的合数),然后再将每个素数的“位置”变一下(如果有必要的话),方便下次生成。2、我刚开始想的是先胡乱生成(生成个数可能远远大于n,用set来防止重复),再排序,这样不行,素数一多,空间就吃不消。/*ID:mrxy564PROG:hu
2014-01-27 17:10:10 296
原创 USACO Score Inflation
1、完全背包问题。。。1Y,《背包九讲》真的很不错。/*ID:mrxy564PROG:inflateLANG:C++*/#include#include#includeusing namespace std;int m,n,w[10010],c[10010],dp[10010];void CompletePack(int w,int c){
2014-01-27 12:22:11 372
原创 USACO Agri-Net
1、由于有了昨天写Dijkstra的经验,这次凭着理解就直接写出了求MST的Prim算法。。。/*ID:mrxy564PROG:agrinetLANG:C++*/#include#includeusing namespace std;const int INF=~0U>>2;int main(){ freopen("agrinet.in","r",st
2014-01-27 11:46:44 283
原创 USACO Fractions to Decimals
1、考察长除法,就是一个很麻烦的模拟。。。注意数组要开足够大,我刚开始开10000都不行,后来开到1000000就过了。。。2、注意末尾的回车,USACO卡得真严!第二章终于做完了,接下来是更大的挑战。。。/*ID:mrxy564PROG:fracdecLANG:C++*/#include#includeusing namespace std;char s[
2014-01-26 23:59:27 234
原创 USACO Bessie Come Home
1、这道题用Dijkstra做,我居然做到一半忘了有重边,WA一次。。。2、Bessie和Farmer John的故事真有趣~/*ID:mrxy564PROG:comehomeLANG:C++*/#include#includeusing namespace std;const int INF=~0U>>2;char s1[2],s2[2];int
2014-01-26 22:30:06 361
原创 UVa OJ 10801
1、不知道是UVa的题太难了还是我太弱了,这道题写了三个多小时。终于学会了用优先队列来优化的dijkstra以及前向星表示法。2、我是这么做的:对每一对结点(楼层),记录四个信息,始发点,终点,时间,电梯类型。注意每一对都要,而不是仅仅是楼层相连的需要。否则在加60的时候会遇到麻烦,dijkstra说到底是用的贪心,如果仅仅记录相连的楼层的话,可能会漏掉一些方案(目光短浅)。我举个例子,如0到
2014-01-26 17:07:57 316
原创 USACO Cow Tours
1、拖了一天,终于靠着题解把这个题过掉了,so happy~2、考察Floyd算法求最短路,其间要注意讨论两点是否在一个连通块。3、要注意直径的定义,很微妙,不一定新形成的直径就大于原来的,因为新加的边的两端点可能不同于原来连通块的直径的点。/*ID:mrxy564PROG:cowtourLANG:C++*/#include#includeusing nam
2014-01-26 02:05:24 344
原创 NOIp2001 求先序排列
1、现在写递归也比较熟练了。。。#include#includeusing namespace std;char s1[10],s2[10],s3[10];int len,pos;void find(char*s1,char*s2,int num){ if(num s3[pos++]=s2[num-1]; int temp=strchr(s1,s2[num
2014-01-25 22:10:16 494
原创 NOIp2002 选数
1、刚开始把dfs里的num写成n了,居然过了样例,结果只过了一个数据。如果是正式比赛,就杯具了。以后交题前要检查一遍代码,最好自己编几个数据测一测。#include#includeusing namespace std;int a[25],n,k,ans;bool is_prime(int num){ int m=(int)sqrt(num+0.5); fo
2014-01-25 21:34:23 340
原创 Round #226 (Div. 2) C、 Bear and Prime Numbers
1、题目链接:http://codeforces.com/contest/385/problem/C2、昨天A、B两题都1Y了,剩下一个半小时就在发呆。。。要是不能突破第三题我就只能永远在DIV2混了。。。3、刚开始觉得困难是因为L,R最多达到2*10^9,觉得筛法求素数的话数组开不了那么大,后来我发现我SB了,因为x最多10的7次方,素数总不可能超过x的最大值吧?等我反应过来的时候,比赛
2014-01-25 12:24:40 449
原创 Round #226 (Div. 2) B、 Bear and Strings
1、题目链接:http://codeforces.com/contest/385/problem/B2、嘛。。。这个就是。。。千万不能死算额,计数问题要找规律,其实还蛮好找的,就是考察乘法原理和加法原理,要仔细。。。1Y。#include#includeusing namespace std;char s[5010];bool find(int i){ if(s
2014-01-25 12:14:22 370
原创 Round #226 (Div. 2) A、Bear and Raspberry
1、题目链接:http://codeforces.com/contest/385/problem/A2、说实话。。。我并没有太看懂题目的背景描述,但是从样例能猜出十之八九。。。就是写个循环,于是1Y。#include#includeusing namespace std;int main(){ int a[110],n,c; scanf("%d%d",&n,&c
2014-01-25 12:11:35 341
原创 【清澄OJ】二分求方程根
1、跟上一道查不多,当开始return fa和fb,结果错了,注意应该return a和b。#include #include #include using namespace std;double getRoot(double (*f)(double), double a, double b){const double eps=1e-6; while(1){
2014-01-24 21:22:02 245
原创 UVa OJ 10341
1、非线性方程求根,用二分法,注意本题的函数是减函数。2、在判断大于还是小于0的时候,应和1e-14比较,而不是直接和0,因为1e-14以内被认为是0。#include#include#define F(x) (p*exp(-x)+q*sin(x)+r*cos(x)+s*tan(x)+t*(x)*(x)+u)const double eps=1e-14;int main()
2014-01-24 21:06:01 207
原创 【清澄OJ】“The Next Cow” Strikes Back
1、就是调用一下字符串排序函数。#include#include#includeusing namespace std;char s[100010][1010];char temp[1010];int cmp_string(const void *_a,const void *_b){ char*a=(char*)_a; char*b=(char*)_b
2014-01-24 20:38:16 316
原创 【清澄OJ】牛顿迭代法求方程的根
1、标题挺吓人的,实际上就是让你写一个循环语句。。。注意把求函数值与求导数值的过程写成一个函数。#include#includeusing namespace std;int cnt=0;double z,k,y,a,b,c,d;double F(double x){ return a*x*x*x+b*x*x+c*x+d;}double D(double
2014-01-24 20:22:24 490
原创 NOIp2002 马拦过河卒
1、本题不难,但是我做了很久,第一个原因是未把“马”的位置设成非法点,也就是读题非常马虎。第二个就是没有用long long型输出。我以为只是一个20*20的棋盘,所有的走法数应该是不会超过整型范围的,事实证明,我还是太年轻了~#include#includeusing namespace std;bool invalid[25][25];int n,m,x,y;bool
2014-01-24 16:53:12 429
原创 USACO Overfencing
1、首先,这个图比较复杂,移动坐标的时候要注意,只有横纵坐标都是偶数的位置才是合法的。2、好久没写bfs了,要注意,一旦进入队列,vis就要设成true,而不是出队的时候再设成true,否则会有大量重复结点,队列的空间会不够。3、我的策略有问题:是为每一个合法位置计算bfs,然后遇到出口再输出,这样计算了大量无用的信息,比如迷宫中任两点之间的最短路,其实是没有必要计算出来的。看了题解后知道
2014-01-24 14:10:58 262
原创 USACO The Tamworth Two
1、这道题的难点在于如何判断“永不相遇”,因为格子是有限的,状态是有限的(每个格子有上下左右四种状态),所以一旦出现重复状态,就说明遇到循环,而在前面的循环都没有遇到,那在后面的循环仍旧不会遇到,也就是“永不相遇”。2、用一个六维数组vis记录状态,共400*400=160000种状态。/*ID:mrxy564PROG:ttwoLANG:C++*/#include#
2014-01-24 11:44:29 253
原创 USACO Controlling Companies
1、本题用dfs做,刚开始我觉得困难的原因是觉得公司之间的控制关系非常复杂,纵横交错。实际上应该一个一个地算,各个击破,每次只考虑一个公司及其子公司。如果一个公司没有直接控制任何子公司,它不可能间接控制任何公司。注意要引入一个con数组来记录dfs所施加的影响(很关键,因为不可能同时知道哪些A的子公司控制B公司,只能找到一个就在B上累加一次,一旦超过50,B就成为A的子公司了)。2、本题错误次
2014-01-24 01:47:29 277
原创 [HNOI2006]马步距离
1、这道题还真是厉害啊,数据超大,采用先贪心再bfs的策略。首先,尽量沿对角线接近目标,等距离在10以内的时候开始bfs暴搜。。。2、代码不是我写的,只是学习一下。。。 #include#include#include#include#include#define rep(i,n) for(int i=0;iusing namespace std;typed
2014-01-24 00:30:43 457
原创 [HNOI2006]超级英雄Hero
1、本题是一道二分图最大匹配的变形,学了一下增广路算法,还是挺好写的。2、由于答题是按顺序的,一旦答错就不能再答,所以依题目顺序寻找,尽量找到最大匹配。3、第一题(点1)是未盖点,从点1开始寻找增广路,直到找到另一个未盖点为止(此时算作找到一条增广路),然后在dfs里顺便更新一下匹配边。4、接着找第二题(点2)的增广路,注意一旦找过的不用再找,因此找过的结点要用vis数组标记,当然了,
2014-01-23 20:55:50 363
原创 SRM 605 AlienAndGame
1、暴力法,从大到小枚举边长,然后再挨个改变左上角的位置,一旦符合要求,立即输出。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #in
2014-01-21 23:01:57 327
原创 SRM 605 AlienAndPassword
1、连续相同的一段,不管去掉哪个都是一样的,所以要算作一个。用个循环减去多余的就是答案。#include #include #include #include #include #include #include #include #include #include #include #include #include #include
2014-01-21 22:58:13 282
原创 【清澄OJ】Sine之舞
1、本以为要用到递归,其实不用,只用循环语句即可,仔细一些、注意分解就行了。#includeusing namespace std;int n;void PrintA(int k){ for(int i=1;i printf("sin(%d",i); if(i!=k){ if(i&1) printf("-"); else print
2014-01-21 15:42:18 576
原创 【清澄OJ】逆序对个数
1、连编译都不用了。我觉得这道题的意义就是告诉我们什么叫逆序对。#includeusing namespace std;int main(){ int n,cnt=0; int a[110]; scanf("%d",&n); for(int i=0;i scanf("%d",&a[i]); for(int i=0;i for
2014-01-21 14:50:23 297
原创 Round #225 (Div. 2)C、Milking Cows
1、题目链接:http://codeforces.com/contest/384/problem/C2、本题我第一个想法是线段树,对每一个点,都维护其左边的“facing left”和“facing right”数,但是编程非常麻烦。3、后来看了别人的代码,异常简洁。它的意思是这样的:从右边第一个脸朝左的奶牛开始挤奶,然后是右边第二个脸朝左的。。。这样消耗的牛奶只有脸朝右的牛的,如果顺序相
2014-01-21 11:40:47 345
原创 Round #225 (Div. 2)B、Multitasking
1、题目链接:http://codeforces.com/contest/384/problem/B2、本题其实超级简单,我被样例迷惑了,以为必须输出最优解,其实输出可行解就行了,其实就是考选择排序。这反映了我比赛经验不足,不会抓关键词。#includeusing namespace std;int main(){ int n,m,k; scanf("%d%d%d"
2014-01-21 10:18:43 284
原创 Round #225 (Div. 2)A、 Coder
1、真的理解了这句话:比赛成绩=比赛实力*比赛经验,是乘号不是加号!这么水的一个题我都做了半个小时,因为刚开始以为是n皇后问题,写了一个超复杂的dfs后,发现每个皇后只能控制前后左右的格子,也就是说,只要做成“国际象棋盘”那个样子就可以了(第一次交发现错了之后,我还尝试了一下对角线,这个是不对的,如果皇后是控制一行或一列的话,交“对角线”就是对的了)。2、本周开始比赛特训吧。题目链接:
2014-01-21 08:40:43 280
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人