栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1413 2D Nim

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1413 2D Nim

#include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <vector>#include <algorithm>using namespace std;#define maxn 110typedef vector<pair<int,int> > PIECE;      typedef vector<PIECE> GRAPH;    const int dx[]={0,0,1,-1};const int dy[]={1,-1,0,0};int w, h;int a[maxn][maxn], b[maxn][maxn];void init(){    int n, x, y;    scanf("%d%d%d", &w, &h, &n);    memset(a, 0, sizeof(a));    memset(b, 0, sizeof(b));    for (int i=0; i<n; i++)    {        scanf("%d%d", &x, &y);        a[x][y]=1;    }    for (int i=0; i<n; i++)    {        scanf("%d%d", &x, &y);        b[x][y]=1;    }}void dfs(int x, int y, int aa[][maxn], int &xmin, int &xmax, int &ymin, int &ymax, PIECE &p){    if (x<0 || y<0 || x>=w || y>=h) return;    if (aa[x][y]==1){        aa[x][y]=0;        p.push_back(make_pair(x, y));        xmin = min(xmin, x);        xmax = max(xmax, x);        ymin = min(ymin, y);        ymax = max(ymax, y);        for (int i=0; i<4; i++) dfs(x+dx[i], y+dy[i], aa, xmin, xmax, ymin, ymax, p);    }}PIECE mirror(const PIECE p, int xmin, int xmax, int ymin, int ymax){    PIECE ret;    for (PIECE::const_iterator j=p.begin(); j!=p.end(); j++)        ret.push_back(make_pair(j->first, ymax-(j->second-ymin)));    return ret;}PIECE rot0(const PIECE p, int xmin, int xmax, int ymin, int ymax)       {    PIECE ret;    for (PIECE::const_iterator j=p.begin(); j!=p.end(); j++)        ret.push_back(make_pair( j->first-xmin, j->second-ymin ));    sort(ret.begin(), ret.end());    return ret;}PIECE rot90(const PIECE p, int xmin, int xmax, int ymin, int ymax)       {    PIECE ret;    for (PIECE::const_iterator j=p.begin(); j!=p.end(); j++)        ret.push_back(make_pair( ymax-j->second , j->first-xmin));    sort(ret.begin(), ret.end());    return ret;}PIECE rot180(const PIECE p, int xmin, int xmax, int ymin, int ymax)      {    PIECE ret;    for (PIECE::const_iterator j=p.begin(); j!=p.end(); j++)        ret.push_back(make_pair( xmax-j->first, ymax-j->second));    sort(ret.begin(), ret.end());    return ret;}PIECE rot270(const PIECE p, int xmin, int xmax, int ymin, int ymax)       {    PIECE ret;    for (PIECE::const_iterator j=p.begin(); j!=p.end(); j++)        ret.push_back(make_pair(j->second-ymin, xmax-j->first));    sort(ret.begin(), ret.end());    return ret;}bool process(){    GRAPH g1, g2;    PIECE p0, p1, p;    int id1=0, id2=0;    int xmin, xmax, ymin, ymax;    g1.clear();    for (int x=0; x<w; x++)        for (int y=0; y<h; y++)        { if (a[x][y]) {     p0.clear(); xmin=ymin=maxn; xmax=ymax=-1;     dfs(x, y, a, xmin, xmax, ymin, ymax, p0);     p1=mirror(p0, xmin, xmax, ymin, ymax);     p=rot0(p0, xmin, xmax, ymin, ymax);    g1.push_back(p);      p=rot90(p0, xmin, xmax, ymin, ymax);   g1.push_back(p);      p=rot180(p0, xmin, xmax, ymin, ymax);  g1.push_back(p);     p=rot270(p0, xmin, xmax, ymin, ymax);  g1.push_back(p);     p=rot0(p1, xmin, xmax, ymin, ymax);    g1.push_back(p);      p=rot90(p1, xmin, xmax, ymin, ymax);   g1.push_back(p);     p=rot180(p1, xmin, xmax, ymin, ymax);  g1.push_back(p);      p=rot270(p1, xmin, xmax, ymin, ymax);  g1.push_back(p);      id1++; }        }    g2.clear();    for (int x=0; x<w; x++)        for (int y=0; y<h; y++) if (b[x][y]) {     p0.clear(); xmin=ymin=maxn; xmax=ymax=-1;     dfs(x, y, b, xmin, xmax, ymin, ymax, p0);     p=rot0(p0, xmin, xmax, ymin, ymax);    g2.push_back(p);     id2++; }    if (id1!=id2) return false;      sort(g1.begin(), g1.end());    sort(g2.begin(), g2.end());    GRAPH::iterator i=g1.begin();    GRAPH::iterator j=g2.begin();    while (i!=g1.end() && j!=g2.end())    {        if (*i!=*j) i++;        if (*i==*j)        { j++; if (j==g2.end()) return true;        }        if (i==g1.end()) return false;    }    return false;}int main(){    int cs;    scanf("%d", &cs);    while (cs--)    {        init();        if (process()) printf("YESn");        else printf("NOn");    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号