2016ACM/ICPC Shengyang Online-1001 Resident Evil
2016-09-20 16:28
274 查看
题意和题解均参考:https://async.icpc-camp.org/d/560-2016-icpc
题意:有一个n*n的格子, 有50种怪物. 有m个操作, 每次操作会往一个矩形区域放怪物, 每个格子放相同数目的怪物, 或者查询当前50种怪物的奇偶性.
题解:把怪物个数的奇偶性用
来表示就变成了一个裸二维树状数组, 考虑分成4个二维树状数组做, 具体参考Iahub and Xors. 需要注意, 同一种怪物在P操作里面会出现多次.
ps.统计(1,1,x,y)中xor和的时候,只有(x,y),(x-2,y),(x-4,y)等格子会对这个矩阵的和产生影响
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=3010;
long long T[4]
;
int n,m;
int Get(int x,int y){
int Res=0;
if (x%2)Res+=1;
if (y%2)Res+=2;
return Res;
}
void Add(int x,int y,long long v)
{
int Index=Get(x,y);
for (int i=x;i<=n;i+=i&(-i))
for (int j=y;j<=n;j+=j&(-j))
T[Index][i][j]^=v;
}
long long Sum(int x,int y)
{
long long Res=0;
int Index=Get(x,y);
for (int i=x;i;i-=i&(-i))
for (int j=y;j;j-=j&(-j))
Res^=T[Index][i][j];
return Res;
}
int main()
{
while (scanf("%d%d",&n,&m)!=EOF){
memset(T,0,sizeof T);
char str[10];int x0,y0,x1,y1,K;long long v;
while (m--){
v=0;
scanf("%s",str);
if (str[0]=='P'){
scanf("%d%d%d%d%d",&x0,&y0,&x1,&y1,&K);
for (int i=1;i<=K;i++){
int A,B;scanf("%d%d",&A,&B);
if (B&1)v^=(1LL<<(A-1));
}
Add(x0,y0,v);
Add(x1+1,y0,v);
Add(x0,y1+1,v);
Add(x1+1,y1+1,v);
}else{
scanf("%d%d%d%d",&x0,&y0,&x1,&y1);
v^=Sum(x1,y1);
v^=Sum(x1,y0-1);
v^=Sum(x0-1,y1);
v^=Sum(x0-1,y0-1);
for (int i=1;i<50;i++)
printf("%d ",(v&(1LL<<(i-1)))?2:1);
printf("%d \n",(v&(1LL<<(50-1)))?2:1);
}
}
}
return 0;
}
题意:有一个n*n的格子, 有50种怪物. 有m个操作, 每次操作会往一个矩形区域放怪物, 每个格子放相同数目的怪物, 或者查询当前50种怪物的奇偶性.
题解:把怪物个数的奇偶性用
来表示就变成了一个裸二维树状数组, 考虑分成4个二维树状数组做, 具体参考Iahub and Xors. 需要注意, 同一种怪物在P操作里面会出现多次.
ps.统计(1,1,x,y)中xor和的时候,只有(x,y),(x-2,y),(x-4,y)等格子会对这个矩阵的和产生影响
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=3010;
long long T[4]
;
int n,m;
int Get(int x,int y){
int Res=0;
if (x%2)Res+=1;
if (y%2)Res+=2;
return Res;
}
void Add(int x,int y,long long v)
{
int Index=Get(x,y);
for (int i=x;i<=n;i+=i&(-i))
for (int j=y;j<=n;j+=j&(-j))
T[Index][i][j]^=v;
}
long long Sum(int x,int y)
{
long long Res=0;
int Index=Get(x,y);
for (int i=x;i;i-=i&(-i))
for (int j=y;j;j-=j&(-j))
Res^=T[Index][i][j];
return Res;
}
int main()
{
while (scanf("%d%d",&n,&m)!=EOF){
memset(T,0,sizeof T);
char str[10];int x0,y0,x1,y1,K;long long v;
while (m--){
v=0;
scanf("%s",str);
if (str[0]=='P'){
scanf("%d%d%d%d%d",&x0,&y0,&x1,&y1,&K);
for (int i=1;i<=K;i++){
int A,B;scanf("%d%d",&A,&B);
if (B&1)v^=(1LL<<(A-1));
}
Add(x0,y0,v);
Add(x1+1,y0,v);
Add(x0,y1+1,v);
Add(x1+1,y1+1,v);
}else{
scanf("%d%d%d%d",&x0,&y0,&x1,&y1);
v^=Sum(x1,y1);
v^=Sum(x1,y0-1);
v^=Sum(x0-1,y1);
v^=Sum(x0-1,y0-1);
for (int i=1;i<50;i++)
printf("%d ",(v&(1LL<<(i-1)))?2:1);
printf("%d \n",(v&(1LL<<(50-1)))?2:1);
}
}
}
return 0;
}
相关文章推荐
- 2016 ACM/ICPC Reginal Shengyang hdu 5892 -Resident Evil 二维树状数组 + 状态压缩
- [Contests]2016 ACM/ICPC Asia Regional Qingdao Online(1001/2/4/5/6)
- 2016 ACM/ICPC Asia Regional Qingdao Online 1001
- 2016 ACM/ICPC Asia Regional Qingdao Online 1001 I Count Two Three(打表+二分搜索)
- hdu--5878(hdu 5878 I Count Two Three (2016 ACM/ICPC Asia Regional Qingdao Online 1001))
- HDU 5878 I Count Two Three 2016 ACM/ICPC Asia Regional Qingdao Online 1001
- hdu 5878 I Count Two Three (2016 ACM/ICPC Asia Regional Qingdao Online 1001)
- HDU 5878 I Count Two Three (2016 ACM/ICPC Asia Regional Qingdao Online 1001)
- 2016 ACM/ICPC Asia Regional Qingdao Online 1001/HDU5878 打表二分
- codeforces H. Delete Them(2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, )
- 1001_Alisha’s Party_2015 ACM/ICPC Asia Regional Changchun Online(优先队列)
- 2016 ACM/ICPC Asia Regional Qingdao Online 1003(AC自动机)
- 2016 ACM/ICPC Asia Regional Dalian Online Friends and Enemies
- 2016 ACM/ICPC Dalian Online-1002 Different GCD Subarray Query
- 2016 ACM/ICPC Dalian Online-1010 Weak Pair
- HDU 5878 I Count Two Three (暴力) 2016 ACM/ICPC Asia Regional Qingdao Online
- HDU 5881 Tea 2016 ACM/ICPC Asia Regional Qingdao Online 1004
- 2016 ACM/ICPC Asia Regional Qingdao Online hdu 5884 Sort (智商+队列)★
- 2016 ACM/ICPC Asia Regional Qingdao Online(Cure)
- HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)——2016 ACM/ICPC Asia Regional Shenyang Online