【SDOI2009】【BZOJ1227】虔诚的墓主人

来源:互联网 发布:kmp next函数算法流程 编辑:程序博客网 时间:2024/04/30 17:17

Description

小W 是一片新造公墓的管理人。公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地。当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地。为了体现自己对主的真诚,他们希望自己的墓地拥有着较高的虔诚度。一块墓地的虔诚度是指以这块墓地为中心的十字架的数目。一个十字架可以看成中间是墓地,墓地的正上、正下、正左、正右都有恰好k 棵常青树。小W 希望知道他所管理的这片公墓中所有墓地的虔诚度总和是多少

Input

第一行包含两个用空格分隔的正整数N 和M,表示公墓的宽和长,因此这个矩形公墓共有(N+1) ×(M+1)个格点,左下角的坐标为(0, 0),右上角的坐标为(N, M)。第二行包含一个正整数W,表示公墓中常青树的个数。第三行起共W 行,每行包含两个用空格分隔的非负整数xi和yi,表示一棵常青树的坐标。输入保证没有两棵常青树拥有相同的坐标。最后一行包含一个正整数k,意义如题目所示。

Output

包含一个非负整数,表示这片公墓中所有墓地的虔诚度总和。为了方便起见,答案对2,147,483,648 取模。

Sample Input

5 6

13

0 2

0 3

1 2

1 3

2 0

2 1

2 4

2 5

2 6

3 2

3 3

4 3

5 2

2
Sample Output

6
HINT

图中,以墓地(2, 2)和(2, 3)为中心的十字架各有3个,即它们的虔诚度均为3。其他墓地的虔诚度为0。 对于30%的数据,满足1 ≤ N, M ≤ 1,000。对于60%的数据,满足1 ≤ N, M ≤ 1,000,000。对于100%的数据,满足1 ≤ N, M ≤ 1,000,000,000,0 ≤ xi ≤ N,0 ≤ yi ≤ M,1 ≤ W ≤ 100,000, 1 ≤ k ≤ 10。存在50%的数据,满足1 ≤ k ≤ 2。存在25%的数据,满足1 ≤ W ≤ 10000。

Source

智商不足,这题真的好难….
黄学长题解

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define LL long long#define MAXN 100010#define P 2147483648ll#define lowbit(x)   (x&(-x))#define GET (ch>='0'&&ch<='9')using namespace std;int n,m,k,w;int sta[MAXN<<1],cnt;LL c[MAXN<<1],C[MAXN][11],ans;int cntx[MAXN<<1],cnty[MAXN<<1],now[MAXN<<1];void in(int &x){    char ch=getchar();x=0;    while (!GET)    ch=getchar();    while (GET) x=x*10+ch-'0',ch=getchar();}struct node {       int x,y;        bool operator <(const node& a)const {   return  y==a.y?x<a.x:y<a.y; }}s[MAXN];void add(int x,LL delta)    {   for (;x<=(w<<1);x+=lowbit(x))   (c[x]+=delta)%=P;   }LL query(int x){    LL ret=0;    for (;x;x-=lowbit(x))   (ret+=c[x])%=P;    return ret;}int main(){    in(n);in(m);in(w);    for (int i=1;i<=w;i++)  in(s[i].x),in(s[i].y),sta[++cnt]=s[i].x,sta[++cnt]=s[i].y;    sort(sta+1,sta+cnt+1);cnt=unique(sta+1,sta+cnt+1)-sta;    for (int i=1;i<=w;i++)          s[i].x=lower_bound(sta+1,sta+cnt+1,s[i].x)-sta,        s[i].y=lower_bound(sta+1,sta+cnt+1,s[i].y)-sta,        cntx[s[i].x]++,cnty[s[i].y]++;    in(k);cnt=0;C[0][0]=1;    for (int i=1;i<=w;i++)    {        C[i][0]=1;        for (int j=1;j<=min(i,k);j++)   (C[i][j]=C[i-1][j-1]+C[i-1][j])%=P;    }    sort(s+1,s+w+1);    for (int i=1;i<=w;i++)    {        if (i>1&&s[i].y==s[i-1].y)  cnt++,(ans+=(query(s[i].x-1)-query(s[i-1].x))*C[cnt][k]*C[cnty[s[i].y]-cnt][k])%=P;        else    cnt=0;        now[s[i].x]++;        LL t=C[now[s[i].x]][k]*C[cntx[s[i].x]-now[s[i].x]][k]-C[now[s[i].x]-1][k]*C[cntx[s[i].x]-now[s[i].x]+1][k];        t%=P;add(s[i].x,t);    }    (ans+=P)%=P;cout<<ans<<endl;}
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小主播人气太少别人看不到怎么办 税收分类编码不可用怎么办 斗鱼鱼翅充错了怎么办 苹果指纹摔坏了怎么办 小米5指纹坏了怎么办 苹果5s指纹失灵怎么办 学生赌博输了3万怎么办 电脑录屏没有声音怎么办 别人说你没有他美怎么办 没有你我怎么办歌词是什么意思 要是没有他我怎么办啊歌词 用喀秋莎保存的视频黑屏怎么办 电脑杀毒之后开不了机怎么办 夫妻离婚分房分车怎么办 请的护身符丢了怎么办 老车轻微烧机油怎么办 电脑下软件变卡怎么办 机械表日历偏了怎么办 子宫内膜异位痛经怎么办 凉着了坏肚子怎么办 昆虫叮咬后疼痛起水泡怎么办 每次来月经都痛经怎么办 人左肩的灯灭了怎么办 香港超过7天了怎么办? 手机拍完照图像是倒的怎么办 地下城金币邮寄卡了怎么办 wow7.3打团本卡怎么办 上古卷轴5出bug怎么办 苹果手机打游戏太卡怎么办 梦幻将军令换了怎么办 手机丢了将军令怎么办 大军之印放弃了怎么办 联想一体机进入界面就死机怎么办 nmd袜子鞋露脚趾怎么办 生意不顺意志崩溃了怎么办 笔记本突然卡住不动了怎么办 指定货代费用高怎么办 空运舱单上的收货人错了怎么办? 被诚信贷骗了怎么办 原户主不迁户口怎么办 二手房原房主没迁走怎么办