【BZOJ 1227】 [SDOI2009]虔诚的墓主人
来源:互联网 发布:跳转页面js 编辑:程序博客网 时间:2024/05/01 00:28
一贯的链接: http://dev.luogu.org:8888/wiki/show?name=%E9%A2%98%E8%A7%A3+P2154
又是神题!!!!
注意 他说自然溢出! 坑死我了啊 自然溢出会变负数!!! 还要自己加上MO啊!!!
代码
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;#define MO 2147483648struct H{ int x,y; int UP,DOWN; //这个点上面有多少棵树(包括这个点) ,这个点下面有多少棵树(不包括这个点) int id;}a[100000+1+1];bool cmpx(H a,H b){ if(a.x==b.x) return a.y<b.y;return a.x<b.x;}bool cmpy(H a,H b){ if(a.y==b.y) return a.x<b.x;return a.y<b.y;}int n,m,w,k;int s[100000+1],id[100000+1],cnt=0; //树状数组 离散 int c[100000+1][10+1]; //组合 int R[100000+1]; //每行 树的数量 int lowbit(int x){return x&-x;}int Sum(int x){// cout<<x<<endl; int ans=0; while(x>=1) ans+=s[x],x-=lowbit(x); return ans; }void Add(int x,int d){ while(x<=cnt) s[x]+=d,x+=lowbit(x);}int main(){ scanf("%d %d %d",&n,&m,&w); for(int i=1;i<=w;i++) scanf("%d %d",&a[i].x,&a[i].y); a[0].x=a[0].y=a[w+1].x=a[w+1].y=-1; scanf("%d",&k); //组合 c[0][0]=1; for(int i=1;i<=w;i++) { c[i][0]=1; for(int j=1;j<=k;j++) c[i][j]=c[i-1][j-1]+c[i-1][j]; } //离散 x id[] //处理 每颗树 上下 各有多少棵树 sort(a+1,a+w+1,cmpx); for(int i=1;i<=w;i++) if(a[i].x==a[i-1].x) a[i].DOWN=a[i-1].DOWN+1,a[i].id=cnt; else a[i].id=++cnt; for(int i=w;i>=1;i--) if(a[i].x==a[i+1].x) a[i].UP=a[i+1].UP+1;else a[i].UP=1; // 每一行有多少颗树 int tmp=0; sort(a+1,a+w+1,cmpy); for(int i=1;i<=w;i++) { tmp++; if(a[i].y!=a[i+1].y) R[i]=tmp,tmp=0; } for(int i=w;i>=1;i--) if(a[i].y==a[i+1].y) R[i]=R[i+1]; //求和 tmp=0; int ans=0; for(int i=1;i<=w;i++) { tmp++; if(a[i].y!=a[i+1].y) tmp=0; else ans+=(c[tmp][k]*c[ R[i]-tmp ][k])*(Sum(a[i+1].id-1)-Sum(a[i].id)); Add(a[i].id, - c[a[i].UP][k] * c[a[i].DOWN][k] + c[a[i].UP-1][k] * c[a[i].DOWN+1][k] ); } while(ans<0) ans+=MO; //自然溢出会变负数!!!!! cout<<ans; return 0;}
0 0
- 【BZOJ 1227】 [SDOI2009]虔诚的墓主人
- bzoj 1227: [SDOI2009]虔诚的墓主人
- bzoj 1227: [SDOI2009]虔诚的墓主人
- [bzoj]1227: [SDOI2009]虔诚的墓主人【树状数组】
- BZOJ 1227: [SDOI2009]虔诚的墓主人 数状数组
- [BZOJ]1227: [SDOI2009]虔诚的墓主人 树状数组
- [SDOI2009]虔诚的墓主人
- BZOJ 1227: [SDOI2009]虔诚的墓主人 树状数组 组合数
- bzoj-1227 虔诚的墓主人
- [BZOJ 1227] 虔诚的墓主人
- 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化
- BZOJ1227: [SDOI2009]虔诚的墓主人
- 【SDOI2009】【BZOJ1227】虔诚的墓主人
- [BZOJ1227][SDOI2009]虔诚的墓主人
- 【SDOI2009】bzoj1227 虔诚的墓主人
- bzoj1227[SDOI2009]虔诚的墓主人
- bzoj1227: [SDOI2009]虔诚的墓主人
- bzoj1227 [SDOI2009]虔诚的墓主人
- 【FZUOJ 2020】 组合
- 【BZOJ 3191】[JLOI2013]卡牌游戏
- 【BZOJ 1088】 [SCOI2005]扫雷Mine
- 理解tcp关闭连接中的time_wait状态
- 【BZOJ 1257】 [CQOI2007]余数之和sum
- 【BZOJ 1227】 [SDOI2009]虔诚的墓主人
- 【BZOJ 1189】 [HNOI2007]紧急疏散evacuate
- Programming in Objective-C 学习笔记06 —— Preprocessor
- 接下来的事
- 【BZOJ 3196】 Tyvj 1730 二逼平衡树
- 【BZOJ 2038】 [2009国家集训队]小Z的袜子(hose)
- 就拿胖子说事
- 【BZOJ 3196】 Tyvj 1730 二逼平衡树 分块
- 【BZOJ 1095】 [ZJOI2007]Hide 捉迷藏 括号序列