自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(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

ACM2013长沙赛区解题报告

ACM 2013长沙赛区解题报告(有标程),只要一个积分!

2013-11-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除