博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 1589 (implement)
阅读量:4058 次
发布时间:2019-05-25

本文共 6234 字,大约阅读时间需要 20 分钟。

思维失误了,是红子可以被吃掉,但被另外一个红字管辖就不能被吃。

/** 20171108*///#define LOCAL //#define TEST#include 
#include
#include
using namespace std;const int dx[] = {
1,-1,-2,-2,-1,1,2,2};const int dy[] = {-2,-2,-1,1,2,2,1,-1};const int fx[] = {
0,-1,0,1};const int fy[] = {-1,0,1,0};char mp[20][20];int ans[20][20];int a,b;int main(){ #ifdef LOCAL freopen("input.txt","r",stdin); freopen("ans.txt","w",stdout); #endif int n; while(scanf("%d%d%d",&n,&a,&b)==3&&n) { memset(mp,0,sizeof(mp)); memset(ans,0,sizeof(ans)); for(int i=1;i<=10;i++) for(int j=1;j<=9;j++) ans[i][j] = 1; while(n--) { char tc[5]; int x,y; scanf("%s%d%d",tc,&x,&y); mp[x][y] = tc[0]; } //solve for(int i=1;i<=10;i++) { for(int j=1;j<=9;j++) { if(mp[i][j]=='R'||mp[i][j]=='G') { for(int k=j+1;k<=9;k++) { ans[i][k] = 0; if(mp[i][k]!=0) break; } for(int k=j-1;k>=1;k--) { ans[i][k] = 0; if(mp[i][k]!=0) break; } for(int k=i+1;k<=10;k++) { ans[k][j] = 0; if(mp[k][j]!=0) break; } for(int k=i-1;k>=1;k--) { ans[k][j] = 0; if(mp[k][j]!=0) break; } #ifdef TEST printf("%c\n",mp[i][j]); for(int i=0;i<11;i++) { for(int j=0;j<10;j++) { printf("%d ",ans[i][j]); } printf("\n"); } #endif }else if(mp[i][j]=='H') { for(int k=0;k<4;k++) { if(mp[i+fx[k]][j+fy[k]]==0) { if(i+dx[k*2]>=0&&j+dy[k*2]>=0) ans[i+dx[k*2]][j+dy[k*2]] = 0; if(i+dx[k*2+1]>=0&&j+dy[k*2+1]>=0) ans[i+dx[k*2+1]][j+dy[k*2+1]] = 0; } } #ifdef TEST printf("%c\n",mp[i][j]); for(int i=0;i<11;i++) { for(int j=0;j<10;j++) { printf("%d ",ans[i][j]); } printf("\n"); } #endif }else if(mp[i][j]=='C') { bool flag = true; for(int k=j+1;k<=9&&flag;k++) { if(mp[i][k]!=0) { for(int u=k+1;u<=9;u++) { ans[i][u] = 0; if(mp[i][u]!=0){flag = false; break;} } } } flag = true; for(int k=j-1;k>=1&&flag;k--) { if(mp[i][k]!=0) { for(int u=k-1;u>=1;u--) { ans[i][u] = 0; if(mp[i][u]!=0){flag = false;break;} } } } flag = true; for(int k=i+1;k<=10&&flag;k++) { if(mp[k][j]!=0) { for(int u=k+1;u<=10;u++) { ans[u][j] = 0; if(mp[u][j]!=0){flag = false;break;} } } } flag = true; for(int k=i-1;k>=1&&flag;k--) { if(mp[k][j]!=0) { for(int u=k-1;u>=1;u--) { ans[u][j] = 0; if(mp[u][j]!=0){flag = false;break;} } } } #ifdef TEST printf("%c\n",mp[i][j]); for(int i=0;i<11;i++) { for(int j=0;j<10;j++) { printf("%d ",ans[i][j]); } printf("\n"); } #endif } } } bool res = true; for(int i=0;i<4;i++) { int ta = a+fx[i]; int tb = b+fy[i]; if(ta>=1&&ta<=3&&tb>=4&&tb<=6&&ans[a+fx[i]][b+fy[i]]==1){res = false;break;} } printf("%s\n",res?"YES":"NO"); } return 0;}

测试数据生成

/** 20171108*/#include 
#include
#include
#include
using namespace std;int color[11][10];void A(int a,int b,int c,int d){ int x = rand()%a+b; int y = rand()%c+d; if(color[x][y]==0) { color[x][y] = 1; printf("%d %d\n",x,y); }else A(a,b,c,d);}int main(){ freopen("input.txt","w",stdout); int n = 1000; srand(time(NULL)); while(n--) { memset(color,0,sizeof(color)); printf("7 "); A(3,1,3,4); printf("G "); A(3,8,3,4); printf("R "); A(10,1,9,1); printf("R "); A(10,1,9,1); printf("H "); A(10,1,9,1); printf("H "); A(10,1,9,1); printf("C "); A(10,1,9,1); printf("C "); A(10,1,9,1); printf("\n"); } printf("0 0 0\n"); return 0;}

转载地址:http://cggci.baihongyu.com/

你可能感兴趣的文章
大数据入门:ZooKeeper工作原理
查看>>
大数据入门:Zookeeper结构体系
查看>>
大数据入门:Spark RDD基础概念
查看>>
大数据入门:SparkCore开发调优原则
查看>>
大数据入门:Java和Scala编程对比
查看>>
大数据入门:Scala函数式编程
查看>>
Remove Duplicates from Sorted List II
查看>>
Spiral Matrix
查看>>
Sudoku Solver
查看>>
Bitwise AND of Numbers Range
查看>>
Happy Number
查看>>
Count Primes
查看>>
Isomorphic Strings
查看>>
Reverse Linked List
查看>>
Android面试题整理【转载】
查看>>
【opencv学习笔记】010之图像非线性滤波原理与操作(中值滤波、双边滤波)
查看>>
【opencv学习笔记】011之基本形态学操作(膨胀与腐蚀)
查看>>
【CryptoZombies - 1 Solidity 教程】010 msg.sender
查看>>
【opencv学习笔记】012之形态学操作(开闭操作,形态学梯度,顶帽与黑帽)
查看>>
【CryptoZombies - 1 Solidity 教程】011 Require
查看>>