问题 D: 自习课
时间限制: 1 Sec 内存限制: 128 MB

题目描述
自习课就是划水课。

你和同桌在玩井字棋,你先手。突然老师进来了。

给定一个局面,问它是否有可能下的出来。

若有可能,求出是否有赢家,若有,输出赢家。

否则,输出是否平局,或者下一步是谁的回合。
输入
有多组数据,第一行给出数据组数 T。

每组数据有 3 行,每行 3 个字符。

若字符为”X”,表示这里你下过,若字符为”O”,表示这里同桌下过。

若字符为”.”,表示这里没有人下过。
输出
每个数据输出一行。

若不可能下的出来,输出Illegal Situation。

若你赢了,输出X wins,若同桌赢了,输出O wins。

若已经下完了,且平局,输出Draw。

若下一步是你的回合,输出X’s turn。

若下一步是同桌的回合,输出O’s turn。

样例输入 Copy

5
...
XX.
..O
XOX
XXO
OXO
.O.
XO.
.O.
XOX
OX.
X.O
XXX
OOO
...

样例输出 Copy
O’s turn
Draw
Illegal Situation
X wins
Illegal Situation

提示
对于前 60% 的数据,不存在三个”X”或”O”连成一线的情况;
对于 100% 的数据,T≤100。

代码

#include<bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)n;i++)
#define rep1(i,n) for(int i=1;i<=(int)n;i++)
#define redp(i,n) for(int i=(int)n-1;i>=0;i--)
#define redp1(i,n) for(int i=(int)n;i>=1;i--)
#define lowbit(x) (x)&(-x)
#define EPSILON 1e-9
typedef long long ll;
using namespace std;
const int dx[] = { 0, 1, -1, 0, 1, -1, 1, -1 };
const int dy[] = { 1, 0, 0, -1, 1, -1, -1, 1 };
const int M = 1e9 + 7;
const int INF=0x3f3f3f3f;
//const double Pi=acos(-1);
const int MOD = 998244353;
bool flag=false;//----------------------------------------------
const int N=2e5+10;
//----------------------------------------------
string s,t;
char a[5][5];bool xpd()                       //我赢
{if(a[1][0]=='X'&&a[1][1]=='X'&&a[1][2]=='X')return true;else if(a[2][0]=='X'&&a[2][1]=='X'&&a[2][2]=='X')return true;else if(a[0][0]=='X'&&a[0][1]=='X'&&a[0][2]=='X')return true;else if(a[0][1]=='X'&&a[1][1]=='X'&&a[2][1]=='X')return true;else if(a[0][2]=='X'&&a[1][2]=='X'&&a[2][2]=='X')return true;else if(a[0][0]=='X'&&a[1][0]=='X'&&a[2][0]=='X')return true;else if(a[0][0]=='X'&&a[1][1]=='X'&&a[2][2]=='X')return true;else if(a[0][2]=='X'&&a[1][1]=='X'&&a[2][0]=='X')return true;return false;
}bool opd()             //同桌赢
{if(a[1][0]=='O'&&a[1][1]=='O'&&a[1][2]=='O')return true;else if(a[2][0]=='O'&&a[2][1]=='O'&&a[2][2]=='O')return true;else if(a[0][0]=='O'&&a[0][1]=='O'&&a[0][2]=='O')return true;else if(a[0][1]=='O'&&a[1][1]=='O'&&a[2][1]=='O')return true;else if(a[0][2]=='O'&&a[1][2]=='O'&&a[2][2]=='O')return true;else if(a[0][0]=='O'&&a[1][0]=='O'&&a[2][0]=='O')return true;else if(a[0][0]=='O'&&a[1][1]=='O'&&a[2][2]=='O')return true;else if(a[0][2]=='O'&&a[1][1]=='O'&&a[2][0]=='O')return true;return false;}//----------------------------------------------
int main()
{int n,m,i,j,k,l;cin>>n;int x=0,y=0;while(n--){x=0;y=0;flag=false;rep(i,3)rep(j,3){cin>>a[i][j];if(a[i][j]=='X')x++;if(a[i][j]=='O')y++;if(a[i][j]=='.')flag=true;}     //统计我下的棋数,同桌下的棋数,记录是否还有.可以下;bool pdd=abs(x-y)<=1&&y<=x?true:false;           //由于我先手,我下的的棋数大于等于同桌下的棋数,且差值小于等于1if(pdd){if(xpd()&&!opd()&&x>y)cout<<"X wins"<<endl;            //我赢时,我的棋数要大于同桌棋数else if(!xpd()&&opd()&&x==y)cout<<"O wins"<<endl;        //同桌赢时,我的棋数要等于同桌棋数else if(xpd()&&opd())cout<<"Illegal Situation"<<endl;else if((!xpd()&&!opd())&&!flag)cout<<"Draw"<<endl;else if((!xpd()&&!opd())&&flag){if(x>y)cout<<"O's turn"<<endl;else if(x==y)cout<<"X's turn"<<endl;}else cout<<"Illegal Situation"<<endl;}else cout<<"Illegal Situation"<<endl;}return 0;
}

【选择】问题 D: 自习课相关推荐

  1. Oracle调优总结--1(经典实践 重要)

    Problem Description: 1.每个表的结构及主键索引情况 2.每个表的count(*)记录是多少 3.对于创建索引的列,索引的类型是什么?count(distinct indexcol ...

  2. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  3. php多表存储,php – MySql在一个单元格中存储另一个表的多个引用并选择它?

    我有两张桌子 table: people id name goods_owned 1 john 1,4,3 2 Mike 2,5 3 Sam 1,5,2 4 Andy 5,3,4 – table go ...

  4. java中实现选择文件_Java 实现文件选择对话框及功能

    时间:2018-10-02 概述:文件选择器 Java实现文件选择器,就是大家熟悉的打开文件.选择文件的对话框,本例子分为两部分来进行,一个部分是选择器对话框构建部分,另一部分是文件过滤部分,用于过滤 ...

  5. Redis 笔记(02)— keys 键相关命令(查询数据库key数量、判断key是否存在、指定key过期时间、查看key类型、查看key剩余秒数、选择数据库、删除key、删除数据库)

    1. keys 键相关命令 命令 说明 dbsize 返回当前数据路的key数量 exists key 测试指定key是否存在 expire key seconds 为key指定过期时间 type k ...

  6. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  7. 机房收费系统【VB版】——选择下机

    前言: 今天实现机房收费系统--一般用户--学生上机状态查看--选中全部/部分下机部分收获很多!多亏了看光哥的博客,写的很清楚机房收费系统--上机状态查询之下机 过程: 要显示的表格式写查询,就会出来 ...

  8. Adam那么棒,为什么还对SGD念念不忘 (3)—— 优化算法的选择与使用策略

    在前面两篇文章中,我们用一个框架梳理了各大优化算法,并且指出了以Adam为代表的自适应学习率优化算法可能存在的问题.那么,在实践中我们应该如何选择呢? 本文介绍Adam+SGD的组合策略,以及一些比较 ...

  9. 企业如何选择音视频会议系统分析

    企业如何选择音视频会议系统分析 腾讯会议和钉钉,哪个费用更划算? 市面上的两大视频会议软件,腾讯会议和钉钉,收费标准和付费功能哪个性价比更高,适合长期使用 腾讯会议和钉钉我都用过,个人认为性价比高一点 ...

最新文章

  1. Learn OpenGL (一):打开窗口
  2. 问题二:相关性怎么引入?
  3. 借力英伟达打造车规L3智能驾驶大脑,揭开德赛西威量产的“秘密”
  4. Java 8 vs. Scala之Lambda表达式
  5. 软 件 学 院 实践环节报告
  6. android 图片识别白色区域进行裁剪_【研途技能贴】| 4款好用的图片处理软件推荐...
  7. 牛客题霸 [ 排序] C++题解/答案
  8. 费纸箱手工制作机器人_环保手工:怎么把纸箱废物利用制作立体小猫(步骤图解)...
  9. 南京铁道学院计算机应用,南京铁道职业技术学院铁道交通运营管理专业
  10. C++构造函数详解(复制构造函数)
  11. Testbench编写详解
  12. 【学习与理解】:CTPN算法
  13. 天宫初级认证答案_百度初级认证考试题(附答案)
  14. 华为2019校招笔试
  15. pygame游戏之旅2:创建游戏窗口界面
  16. Flyway数据库版本管理工具
  17. IJCAI 2021 投稿安排出来了!新审稿机制体验一下?
  18. python实现有趣的数学逻辑程序
  19. 程序员泪流满面的瞬间,第三季
  20. java念整数 你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。 如输入1234,则输出: yi er san si

热门文章

  1. 基于JAVA基于web的老年公寓管理计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  2. Python登录qq邮箱发送邮件(附件)
  3. java 西部数码_实力打造 西部数码JAVA虚拟主机重装登场
  4. 法国警察局摆脱微软转投Linux怀抱
  5. 【记录日常】解决Mac M1录屏带系统声音的方法(Quicktime Player+Blackhole)
  6. 在英语聊天室看见的一段恶搞
  7. 【解析cpu正常温度多少是及如何查看】
  8. Midjourney生成LOGO指南
  9. 如何构建 SOA 系统 --苏振兴
  10. Python+Vue计算机毕业设计旅游管理系统z1fuc(源码+程序+LW+部署)