【选择】问题 D: 自习课
问题 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: 自习课相关推荐
- Oracle调优总结--1(经典实践 重要)
Problem Description: 1.每个表的结构及主键索引情况 2.每个表的count(*)记录是多少 3.对于创建索引的列,索引的类型是什么?count(distinct indexcol ...
- 简单介绍互联网领域选择与营销方法
在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...
- 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 ...
- java中实现选择文件_Java 实现文件选择对话框及功能
时间:2018-10-02 概述:文件选择器 Java实现文件选择器,就是大家熟悉的打开文件.选择文件的对话框,本例子分为两部分来进行,一个部分是选择器对话框构建部分,另一部分是文件过滤部分,用于过滤 ...
- Redis 笔记(02)— keys 键相关命令(查询数据库key数量、判断key是否存在、指定key过期时间、查看key类型、查看key剩余秒数、选择数据库、删除key、删除数据库)
1. keys 键相关命令 命令 说明 dbsize 返回当前数据路的key数量 exists key 测试指定key是否存在 expire key seconds 为key指定过期时间 type k ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- 机房收费系统【VB版】——选择下机
前言: 今天实现机房收费系统--一般用户--学生上机状态查看--选中全部/部分下机部分收获很多!多亏了看光哥的博客,写的很清楚机房收费系统--上机状态查询之下机 过程: 要显示的表格式写查询,就会出来 ...
- Adam那么棒,为什么还对SGD念念不忘 (3)—— 优化算法的选择与使用策略
在前面两篇文章中,我们用一个框架梳理了各大优化算法,并且指出了以Adam为代表的自适应学习率优化算法可能存在的问题.那么,在实践中我们应该如何选择呢? 本文介绍Adam+SGD的组合策略,以及一些比较 ...
- 企业如何选择音视频会议系统分析
企业如何选择音视频会议系统分析 腾讯会议和钉钉,哪个费用更划算? 市面上的两大视频会议软件,腾讯会议和钉钉,收费标准和付费功能哪个性价比更高,适合长期使用 腾讯会议和钉钉我都用过,个人认为性价比高一点 ...
最新文章
- Learn OpenGL (一):打开窗口
- 问题二:相关性怎么引入?
- 借力英伟达打造车规L3智能驾驶大脑,揭开德赛西威量产的“秘密”
- Java 8 vs. Scala之Lambda表达式
- 软 件 学 院 实践环节报告
- android 图片识别白色区域进行裁剪_【研途技能贴】| 4款好用的图片处理软件推荐...
- 牛客题霸 [ 排序] C++题解/答案
- 费纸箱手工制作机器人_环保手工:怎么把纸箱废物利用制作立体小猫(步骤图解)...
- 南京铁道学院计算机应用,南京铁道职业技术学院铁道交通运营管理专业
- C++构造函数详解(复制构造函数)
- Testbench编写详解
- 【学习与理解】:CTPN算法
- 天宫初级认证答案_百度初级认证考试题(附答案)
- 华为2019校招笔试
- pygame游戏之旅2:创建游戏窗口界面
- Flyway数据库版本管理工具
- IJCAI 2021 投稿安排出来了!新审稿机制体验一下?
- python实现有趣的数学逻辑程序
- 程序员泪流满面的瞬间,第三季
- java念整数 你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。 如输入1234,则输出: yi er san si
热门文章
- 基于JAVA基于web的老年公寓管理计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- Python登录qq邮箱发送邮件(附件)
- java 西部数码_实力打造 西部数码JAVA虚拟主机重装登场
- 法国警察局摆脱微软转投Linux怀抱
- 【记录日常】解决Mac M1录屏带系统声音的方法(Quicktime Player+Blackhole)
- 在英语聊天室看见的一段恶搞
- 【解析cpu正常温度多少是及如何查看】
- Midjourney生成LOGO指南
- 如何构建 SOA 系统 --苏振兴
- Python+Vue计算机毕业设计旅游管理系统z1fuc(源码+程序+LW+部署)