标签:for scanf string bsp cst mat pac sort ash
哈希,对于每个点哈希一次
哈希的方式:该点到联通分量边界(上下左右)的距离和
然后分别对两个图的n个点按hash值排序,判断是否相等即可
1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <iostream> 10 #include <algorithm> 11 using namespace std; 12 struct point{int x,y;}p[10001]; 13 int T,W,H,n,flag,a[100][100],hash[2][10001]; 14 int main(){ 15 for(scanf("%d",&T);T--;){ 16 scanf("%d%d%d",&W,&H,&n); 17 memset(hash,0,sizeof(hash)); 18 for(int c=0;c<=1;c++){ 19 memset(a,0,sizeof(a)); 20 for(int i=1;i<=n;i++)scanf("%d%d",&p[i].x,&p[i].y),a[p[i].x][p[i].y]=1; 21 for(int i=1;i<=n;i++){ 22 int px=p[i].x,py=p[i].y; 23 for(int x=px+1;x<W &&a[x][py];x++)hash[c][i]++; 24 for(int x=px-1;x>=0&&a[x][py];x--)hash[c][i]++; 25 for(int y=py+1;y<H &&a[px][y];y++)hash[c][i]++; 26 for(int y=py-1;y>=0&&a[px][y];y--)hash[c][i]++; 27 } 28 sort(hash[c]+1,hash[c]+n+1); 29 } 30 flag=true;for(int i=1;i<=n;i++)if(hash[0][i]!=hash[1][i]){flag=false;break;} 31 cout<<(flag?"YES":"NO")<<endl; 32 } 33 return 0; 34 }
标签:for scanf string bsp cst mat pac sort ash
原文地址:https://www.cnblogs.com/JasonCow/p/12294775.html