上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 36 下一页

2011年5月14日

poj 2155

摘要: 题意:一个n*n的01矩阵,和几种动态操作,包括对子矩阵(x,y,xx,yy)的所有元素异或,查询某一点(x,y)的元素值。参见国家队 09年 武森《浅谈信息学竞赛中的“0”和“1”》代码:#include<iostream>#include<fstream>using namespace std;int b[1005][1005];int lowbit(int x){ return x&(-x);}int n;void add(int x,int y){ int i=y; while(x<=n) { y=i; while(y<=n) { b[x][ 阅读全文

posted @ 2011-05-14 16:53 宇宙吾心 阅读(726) 评论(0) 推荐(0)

poj 1195

摘要: 题意:一个n*n的矩阵,和几种动态操作,包括对某一点(x,y)值修改,查询子矩阵(x,y,xx,yy)的元素和。思路:二维树状数组,典型的动态操作题目。查询子矩阵(x,y,xx,yy)的元素和,注意一下就可以了: sum(xx, yy)-sum(x-1, yy)-sum(xx,y-1)+sum(x-1,y-1);代码:#include<iostream>#include<fstream>using namespace std;int b[1025][1025];int lowbit(int x){ return x&(-x);}int n;void add(in 阅读全文

posted @ 2011-05-14 16:21 宇宙吾心 阅读(382) 评论(0) 推荐(0)

poj 3321

摘要: 题意:一棵具有n个节点的树,一开始,每个节点上都有一个苹果。现在给出m组动态的操作:(C,i)是摘掉第i个节点上面的苹果(若苹果不存在,则为加上一个苹果),(Q,i)是查询以第i个节点为根的子树有几个苹果(包括第i个节点)。思路:树状数组。这道题重点怎么建立树到树状数组的映射关系:利用dfs遍历树,对每个节点进行两次编号,第一次搜到第i个节点时的深度dep,为这个节点管辖区间的上限low[i](也为这个节点的下标),然后搜这个节点的子节点,最后搜回来后的深度dep,为这个节点管辖区间的下限high[i],如下图所示。接下来就是树状数组部分了。代码:#include<iostream> 阅读全文

posted @ 2011-05-14 16:01 宇宙吾心 阅读(1014) 评论(0) 推荐(0)

2011年5月13日

poj 2352(树状数组)

摘要: 题意:按y递增的顺序给出n颗星星的坐标(y相等则x递增),每个星星的等级,等于在它左边且在它下边(包括水平和垂直方向)的星星的数量,求出等级为0到n-1的星星分别有多少个。代码:#include<iostream>#include<fstream>using namespace std;int n,m;struct e{ int s,t;};e a[15001];int b[32020];int lowbit(int x){ return x&(-x);}void add(int s){ while(s<=m) { b[s]++; s+=lowbit(s) 阅读全文

posted @ 2011-05-13 19:17 宇宙吾心 阅读(323) 评论(0) 推荐(0)

poj 2481

摘要: 题意:FJ有n头牛(编号为1~n),每一头牛都有一个测验值[S,E],如果对于牛i和牛j来说,它们的测验值满足下面的条件则证明牛i比牛j强壮:Si <= Sj andEj <= Ei and Ei - Si > Ej -Sj。现在已知每一头牛的测验值,要求输出每头牛有几头牛比其强壮。代码:#include<iostream>#include<fstream>using namespace std;int n,m;struct e{ int id,s,w;};e a[100011];int cmp(const void *a,const void *b) 阅读全文

posted @ 2011-05-13 18:58 宇宙吾心 阅读(789) 评论(0) 推荐(0)

poj 3067

摘要: 题意:日本东海岸有n个城市,西海岸有m个城市,现在要修建k条高铁连接东海岸的城市u和西海岸的城市v。问这k条高铁总共有多少个交点。代码:#include<iostream>#include<fstream>#include<vector>using namespace std;vector<long long> a[1001];long long n,m;long long b[1001];long long lowbit(long long x){ return x&(-x);}void add(long long s,long lon 阅读全文

posted @ 2011-05-13 17:26 宇宙吾心 阅读(272) 评论(0) 推荐(0)

poj 2299

摘要: 逆序数。归并或树状数组代码:#include<iostream>#include<fstream>using namespace std;struct e{ int id; int w;};e a[500001];int n;int cmp(const void *a,const void *b){ return (*(e*)b).w-(*(e*)a).w;}int b[500001];int lowbit(int s){ return s&(-s);}void add(int s){ while(s<=n) { b[s]+=1; s+=lowbit(s) 阅读全文

posted @ 2011-05-13 16:35 宇宙吾心 阅读(173) 评论(0) 推荐(0)

poj 1990

摘要: 第一道树状数组代码:#include<iostream>#include<fstream>using namespace std;int n;struct e{ int v,x;};e a[20001];long long cnt[20001],sum[20001];int lowbit(int x){ return x&(x^(x-1));}void modify(long long a[],int s,int t){ while(s<=20000) { a[s]+=t; s+=lowbit(s); }}long long getsum(long lon 阅读全文

posted @ 2011-05-13 15:41 宇宙吾心 阅读(412) 评论(0) 推荐(0)

2011年5月12日

poj 1977

摘要: 矩阵连乘注意:for(i=1;i<=n;i++) map[i][i]=1;代码:#include<iostream>#include<fstream>using namespace std;int n;long long m;char c[101][101][22];char c1[101][22];int num[101];int a[101];int map[101][101],map1[101][101],map2[101][101];void solve(long long s){ int i,j,k; if(s==1) { for(i=1;i<=n 阅读全文

posted @ 2011-05-12 18:20 宇宙吾心 阅读(264) 评论(0) 推荐(0)

poj 1322

摘要: 题意是,c种不同颜色的巧克力,每种巧克力同样多,把巧克力一个一个拿到桌子上,当发现有相同颜色就全吃掉,求取出了n个后,还剩m个在桌子的概率。直接求概率是不可能,要用到DP。动态转移方程:p[n][m]表示n个巧克力,还剩m个在台上的概率p[n][m]=p[n-1][m-1]*p1+p[n-1][m+1]*p2p1=(c-m+1)/c,p2=(m+1)/c当m+n为奇时,概率为0特别注意:当n很大时,概率处于稳定,但是还是要处理奇偶性代码:#include<iostream>#include<fstream>using namespace std;double dp[10 阅读全文

posted @ 2011-05-12 16:44 宇宙吾心 阅读(599) 评论(0) 推荐(0)

上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 36 下一页

导航