#include<iostream>
#include<vector>
#include<stdio.h>
#include<unordered_set>
#include<unordered_map>
using namespace std;
int main(){
int n,m,p,q;
int k=0;
unordered_set<int> k1,k2;
cin>>n>>m>>p>>q;
unordered_map<int,vector<int>> workers;
for(int k=0;k<p;k++){
int i,j;
cin>>i>>j;
workers[k+1]={i,j};
}
int dragon[q+1][3];
//vector<vector<int>> dragon(q+1,vector<int>(3));
for(int k=1;k<=q;k++){
cin>>dragon[k][0]>>dragon[k][1]>>dragon[k][2];
}
int pos[8][2]={{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
for(int k=1;k<=q;k++){
int i=dragon[k][0];
int j=dragon[k][1];
int strengh=dragon[k][2];
int s=max(m,n);
vector<vector<int>> worker;
//八个方向遍历
for(int b=1;b<=8;b++){
int x=i;
int y=j;
for(int c=1;c<s;c++){
x=pos[b-1][0]*c+x;
y=pos[b-1][1]*c+y;
for(int a=0;a<workers.size();a++){
if(workers[a+1][0]==x&&workers[a+1][1]==y){
worker.push_back({a+1,b-1});
//cout<<a+1<<" "<<b-1<<endl;
if(k1.find(c)==k1.end()){
k1.insert(c);
}
}
}
}
}
int min_k2=min(n-i,min(m-j,min(i,j)));
for(int c=1;c<=min_k2;c++){
k2.insert(c);
}
for(int c=0;c<k1.size();c++){
for(auto x:k1){
if(k2.count(x)){
k=x;
}
}
}
//位置转换
for(int c=0;c<worker.size();c++){
int cur=worker[c][0];
int l=worker[c][1];
l=(l+strengh)%8;
workers[cur][0]=i+k*pos[l][0];
workers[cur][1]=j+k*pos[l][1];
}
int ans=0;
for(int i=0;i<workers.size();i++){
ans=ans^((i+1)*workers[i+1][0]+workers[i+1][1]);
}
cout<<ans<<endl;
}
}
CCF-CSP202309-4阴阳龙,运行超时求大佬指点
于 2023-11-28 19:52:31 首次发布