zoukankan      html  css  js  c++  java
  • C++-POJ1021-2D-Nim[hash]

    哈希,对于每个点哈希一次

    哈希的方式:该点到联通分量边界(上下左右)的距离和

    然后分别对两个图的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 } 
    ~~Jason_liu O(∩_∩)O
  • 相关阅读:
    Netty入门——客户端与服务端通信
    使用配置文件自定义Ribbon配置
    使用Java代码自定义Ribbon配置
    Spring Cloud Ribbon入门
    负载均衡简介
    常见的几种负载均衡算法
    Eureka编程
    Eureka多机高可用
    Maven项目打包成可执行Jar文件
    Eureka单机高可用伪集群配置
  • 原文地址:https://www.cnblogs.com/JasonCow/p/12294775.html
Copyright © 2011-2022 走看看