- 博客(31)
- 收藏
- 关注
原创 Poj 2352 Stars
<br />#include<cstdio>#include<cstring>#define N 32010using namespace std;int C[2*N],ans[N],n;int lowbit(int pos){ return pos&(-pos);}int Sum(int pos){ int sum=0; while (pos>0){ sum+=C[pos]; pos-=lowbit(po
2010-09-10 16:31:00
507
原创 Poj 树状数组
树状数组查询和修改复杂度都为log(n),假设数组a[1..n],那么查询a[1]+...+a[n]的时间是log(n),而且是一个在线的数据结构,随时修改某个元素的值,复杂度也为log(n)。C1 = A1C2 = A1 + A2C3 = A3C4 = A1 + A2 + A3 + A4C5 = A5C6 = A5 + A6C7 = A7C8 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8...C16 = A1 + A2 + A3 + A4 + A5 + A6 + A7 +
2010-09-10 16:20:00
632
原创 Poj 1363 Rails
<br />#include<cstdio>#include<cstring>#include<stack>using namespace std;const int maxn=1005;stack <int> S;int x[maxn];int main(){ int n,y,i,j; bool yes; while (scanf("%d",&n)&&n){ while (scanf("%d",&x[0])&&x[0]){ for (i=1;i<n
2010-09-10 10:13:00
516
原创 Poj 栈
<br />真正的单纯栈的题感觉不多,一般都是在一道题里面处理一些数据的时候会用到,队列什么的也是。<br /> <br /> <br /><br />特别理解栈的性质,先进后出FILO。<br />由这个性质可以解决很多先进后出的问题,在模拟题里面也很多用到的。<br />最典型最基本的应用是计算运算表达式和括号匹配。<br />理解这个之后要扩展也就变得容易了,凡是类似括号匹配的都可以用栈来处理了。<br />比如昨天哈尔滨热身赛的1006。<br /> <br /> <br />Poj 1363 问一
2010-09-10 10:11:00
871
原创 并查集
<br />#include<cstdio>#include<cstring>using namespace std;const int maxn=100;int n;void init(){ for (i=1;i<=n;i++) fa[i]=i;}int find(int i)//查询所属集合 { if (fa[i]!=i) return fa[i]=find(fa[i]);//路径压缩 return i;}void Union(int
2010-09-10 10:03:00
349
原创 poj 1988 Cube Stacking
<br />很久没写并查集了,发现这道没写过,早上交的现在还在waiting~<br /> <br />只有再交一次咯~<br /> <br />#include<cstdio>#include<cstring>using namespace std;const int maxn=30005;int fa[maxn],root[maxn],dis[maxn];//父节点,作为根时树的节点数,距树根的距离 int p;int find(int i){ int tmp; if
2010-09-08 15:31:00
353
原创 Poj 并查集
写了两三天的模拟,过段时间再写吧,今天开始数据结构。既然数据结构分成集合,线性表,树,图四种,今天就从集合开始看。另外关于图的我就不写了,后面再专门写图论的东东。并查集:简单说来,对于元素有合并和查询两种操作,合并O(n),查询O(1)。并查集学的有点久了,第一次接触是学kruskal的时候,后来有专门系统写过并查集的题。单独并查集的题其实不多,一半都是中间对数据做一些处理。个人感觉加了压缩路径之后按秩合并的效率并不会提高太多,北大PPT上也把按秩合并叉掉了。我写的并查集都是只有路径压缩的,都是些以前写过的
2010-09-07 10:22:00
561
原创 Poj 2632 Crashing Robots
<br />A是列数,东西走向,B是行数,南北走向。<br /> <br />1.一个B*A的棋盘,n个机器人,m个操作<br /> <br />2.n个机器人给出最初的位置和方向<br /> <br />3.m个操作,操作的机器人的号,左转右转前进,该操作重复的次数。<br /> <br />4.一个机器人的操作完毕之后下一个机器人才启动。<br /> <br />5.3种结果,撞墙,和另一相撞,无冲突OK。<br /> <br />#include<cstdio>#include<cstring>
2010-09-06 21:12:00
426
原创 Poj 3768 Repeater
<br />2083的升级版。<br /> <br />最开始用的布尔矩阵确定是否是空格,递归,一个一个打印,但是TLE了。<br /> <br />看了discuss,改成存入一个字符串数组,整行打印,依然TLE。<br /> <br />去掉布尔矩阵,直接写入字符串,900+ms,AC,寒。<br /> <br />0ms是怎么做出来的。<br /> <br />#include<cstdio>#include<cstring>using namespace std;char str[6][
2010-09-06 13:22:00
819
原创 Poj 2083 Fractal
<br />一道关于分形的题目。<br /> <br />就是按比例把图形放大。<br /> <br />第一次写这种类型,自己想了几种写法,这个写得是循环的,比较难懂,比较挫。<br /> <br />后面的3768是用的比较标准的分形。<br /> <br />#include<cstdio>#include<cstring>using namespace std;const bool is[3][3]={1,0,1,0,1,0,1,0,1};int cur[15][2]; int
2010-09-06 13:18:00
709
原创 Poj 1676 What time is it?
一道关于LED灯的模拟。1.有两个LED灯,左边是现在的时间,右边慢了15min。2.四位表示一个时间,0000~2359。3.LED的有些管坏掉了不亮,问能否根据剩下的灯管确定当前的时间。它的description有点抽象,多了两行。 _ _ _ _ _ _ _ _ | | | _| _||_||_ |_ ||_||_||_| ||_ _| | _||_| ||_| _|我是给每个灯管一个权值,所以一个二进制数表示0~9的数字。按照2^i ,i 如
2010-09-05 20:43:00
714
原创 Poj 1489 Egyptian Multiplication
<br />大概意思是计算a*b,把b转换成二进制计算。<br /> <br />1. 数值系统无零,用|代表一,用n代表十,用9代表百,用8代表千,用r代表万,不考虑大于99,999的数。<br /> <br />2.一个数被写成它们的组合,每组后面有一个空格,包括最后一组,如4023=>||| nn 8888 <br /> <br />3.做乘法,将|写在左边,a写在右边,不断将左右的数增倍直到左边的数大于b,将能组合成b的数后面加*。<br /> 其实就是把b换成二进制,为1的位后面带*。<br
2010-09-05 16:00:00
706
原创 Poj 1786 Bridge Hands
<br />1.将52张牌发给4个人,每人13张。<br /> <br />2.排序输出,按suit的优先级大于rank。<br /> <br />3.suit的优先级为C<D<S<H。代表(club) < (diamond) < (spade) < (heart)。<br /> <br />4.rank的优先级为2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < T < J < Q < K < A 。<br /> <br />5.玩家的名称为东南西北,每次一个发牌者,从他左手开始发,顺时针直到
2010-09-05 15:50:00
874
2
原创 Poj 2993 Emag eht htiw Em Pleh
<br />它自己都说了跟2996相反,题目很奇怪,仔细看就是2996的reverse……汗<br />跟之前去北大校赛的时候那道模拟就很像,当时就是直接把格子贴上了,所以我还是贴了……<br /> <br />#include<cstdio>#include<cstring>using namespace std;char chess[55][55]={"+---+---+---+---+---+---+---+---+","|...|:::|...|:::|...|:::|...|:
2010-09-04 14:24:00
446
原创 Poj 2996 Help Me with the Game
<br />注意下规则<br />白色大写,黑色小写。<br />棋盘编号从下到上是1~8,从左到右是a~h<br />输出的时候类型都是大写,黑白棋的排序规则不一样。<br />1.按KQRBNP的优先顺序排。<br />2.相同类型白棋按行号小的排前面,黑棋按行号大的排前面。<br />3.相同列号按小排前面。<br /> <br />#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char
2010-09-04 14:22:00
392
原创 Poj 1573 Robot Motion
<br />顺着搜就行了。<br /> <br />#include<cstdio>#include<cstring>using namespace std;int r,c,sta;char gra[15][15];int s[15][15];bool check(int x,int y){ if (x>=0&&x<r&&y>=0&&y<c) return 1; return 0;}bool Search(int &step,int &loop){
2010-09-04 14:14:00
417
原创 Poj 1472 Instant Complexity
<br />最开始自己写了一个栈,后来发现悲剧了。<br />并列的情况处理不当,改起来很麻烦,突然想起那天多校比较大小的那道模拟。<br />改成了递归,就过了。<br />#include<cstdio>#include<cstring>#include<stack>using namespace std;struct opera{ char op; int num;};stack <opera> S;char op[10],num[10];int ans[12]
2010-09-04 14:10:00
723
原创 Poj 模拟题
最近都在写模拟,之前一个学姐超级擅长模拟。做模拟题不外乎题长,代码长,为的就是要把你打倒,所以再做的时候必须抱着比过的决心。听从了学姐的建议,读题的时候拿一张白纸,把所有的细节都写上,就像作文的框架一样。然后先在纸上写大概要怎么做,有些模拟题太长,做着做着就忘了。当所有的都考虑好了才开始敲题,这样通过率又高又不会浪费队友的时间。最开始就一个人默默地在纸上写吧~~~Poj 1472 1573 2993 2996剩下的以后做了再跟新吧
2010-09-04 14:08:00
983
原创 凸包
<br />找了挺多题验的,一个小小的细节不注意就会WA掉。<br />boj 1673 boj 1251<br /> <br />#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define MAXN 50005#define pi acos(-1.0)#define eps 1e-8#define inf 200000000using namespace std;struct p
2010-08-30 21:33:00
403
原创 求多边形重心
<br />好久又没来了,最近都忙啥自己都不知道,今天正式开学了但是三周都没课。<br />还有,最近电脑出了点状况,重装win7之后各种没对,开学人多网速慢。<br />昨天开始整理模板,但是SAP封装不成功…只有再接再厉了,今天又看计算几何了,北大上不去,抑郁。<br />从最简单的开始咯~<br /> <br /> <br /> <br />x=∑si*xi/∑si y=∑si*yi/∑si<br />si是每个小三角形的面积<br />zoj 2015 <br />boj 1476<br />
2010-08-30 11:40:00
356
原创 多校_BJTU_Good Serial Inc. hdoj3482
<br />就是个很简单的题,比赛的时候很多队都没有想到m=2的特殊情况,哈,还好我们一WA就发现了,好多队一直狂WA,后来还过来问到底怎么回事。<br />m<2和n<m时,ans=m^n,否则ans=m!+m<br />#include<cstdio>#include<cstring>using namespace std;const long long mod=987654321;int main(){ int i,j,n,m; long long ans,tmp; w
2010-08-22 15:07:00
442
原创 多校_BIT_1001 Tour hdoj3488
<br />给一个有向带权图,求一种划分,使得每个点都在一个环中,而且所有环的边权和最小。<br />用带权二分匹配做,A集合和B集合。每个点存成A集合中一个点和B集合中一个点。<br />i到j有边即是A中的i到B中的j右边,其实存图的时候还是gra[a][b]=c,只是理解不一样了。<br />然后用KM求最佳匹配,求最小匹配就把存在边的用正无穷减去,转换一下,注意有重边。<br /> <br />#include<cstdio>#include<cstring>#include<algorit
2010-08-22 15:04:00
404
原创 多校_BIT_Star Grazer hdoj3497
<br />这个就是个推公式。<br />干涉现象,然后画光路图各个角的关系求解。比赛的时候为了求的是哪个角纠结了很久。<br />#include<cstdio>#include<cmath>using namespace std;const double pi=acos(-1.0);int main(){ double h,a; while (scanf("%lf%lf",&h,&a)!=EOF) printf("%.2lf/n",asin(a/4/h/100)*180
2010-08-21 19:37:00
434
原创 多校_BIT_Watch the Movie hdoj3496
<br />dp,背包。<br />#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,m,l;int dp[1005][105];int main(){ int t,i,j,k,len,val,ans; scanf("%d",&t); while (t--){ scanf("%d%d%d",&n,&m,&l); memset(dp,-1,sizeof(
2010-08-21 19:05:00
399
原创 多校_BIT_Thieves hdoj3491
这个一看就知道是网络流,但是比赛的时候建图建了好久,我们这方面还有待加强。就是拆点和最大流。将每个城市拆成两个点,i*2-1,i*2,gra[i*2-1][i*2]=i 城市的点权,如果城市i和城市j有边,则有边gra[i*2][j*2-1]和gra[j*2][i*2-1],权值均为正无穷。最后将起点和终点所拆出的两点间的边权设为正无穷,然后最大流。赛后重写顺便复习了下EK和dinic。EK#include#include#include#include#define inf 1000000
2010-08-21 17:26:00
374
原创 多校_BIT_Segment hdoj3492
<br />现在开始按分工吧,自己看计算几何。这个是之前比赛的一题,当时队友以为跟北大上一题差不多,后来发现他的意思是给了很多线段,问是否存在一条直线使得所有线段在直线上的投影有公共交点。我看了很多clarification才明白的题意。他那个单词用的太不常用的意思了。<br />#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const double eps=1
2010-08-21 15:03:00
329
原创 多校_WHU_How Many Times hdoj3561
这个是比赛时候写的。她们在写Bomb时我写完了1008,然后给我说了这题的大概题意。100的数据规模,应该是n^3,但是怎么都没想到咋做。后来决定用扫描线扫,代码量估计巨大。开始写,各种纠结。她们继续调1008,我就开始跟圆做斗争。写完之后队友出个数据错了,继续调,后来终于好了,一看,还剩三分钟了。交了,畸形的代码1A。 大概就是把圆的最大最小x值,及交点的x值作为扫描线,每条扫描线再用线段覆盖的方法求覆盖的最大值。因为端点是浮点的,所以先离散化了然后求,代码量有点大。#include
2010-08-20 19:06:00
433
原创 多校_WHU_Graph’s Cycle Component hdoj3560
#include#include#include#define N 100010using namespace std;struct Node{ int id,fa;};int n,m;Node node[N];int id[N],fa[N];int find(int i){ if (i!=fa[i]) return fa[i]=find(fa[i]); return i;}void Union(int i,int j){ fa[find(i)]=find(j);}bool cmp(Node a,Node
2010-08-20 16:54:00
528
原创 多校_WHU_Bomb hdoj 3555
比赛的时候是队友做得,好像跟解题报告不是一种方法。#include#includeusing namespace std;int dig[20];long long dp[15][4];int TransState(int state,int num){ if (state==0) return (num==4)?1:0; if (state==1) if (num==4) return 1; else if (num==9)
2010-08-20 16:50:00
584
1
原创 多校_WHU_Another Contest hdoj 3554
最近写水题各种错,本来写的时候就没什么信心,结果此题WA2次,给我们队造成了巨大的损失,最后还一个队友过来帮我检查。赛后再写还WA一次。难道是太久没写水题了~~?#include#include#include#define N 1005using namespace std;struct P{ int sc,num,id;};P per[N];int sta[N];bool cmp(P a,P b){ if (a.sc!=b.sc) return a.sc>b.sc; if
2010-08-20 16:44:00
355
原创 新的起点
<br />再半个月就大三了,接触各种编程语言,计算机的东西就快两年了。<br />高中时代坚决不学金融,不学计算机,却最后还是莫名其妙踏上了这条路。<br />然后呢,什么都不知道,什么都不懂,开始了无尽的探索。<br />很多同学在之前对这些都是有一定了解的,而我连最基本的,比如,C语言是什么都没有概念。<br /> <br />在一个朋友的怂恿下动了参加ACM的念,才开始学C不到三个月。<br />其实当时对这个完全没有概念,只知道出路很好,是的,出路很好。<br />新生赛,从男生那边找了一个没有队
2010-08-20 16:37:00
333
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人