题目来源:USACO - Bronze - USACO 2018 US Open

题目描述:

Farmer John有26头奶牛,恰好她们名字都以不同的字母开头,所以Farmer John用每头奶牛的名字的首字母来指代她——一个A ⋯Z之间的字母。

这些奶牛最近沉迷于井字游戏,但是由于她们并不满足只有两头奶牛可以一起玩,她们改编了这个游戏,可以让许多奶牛可以一块儿玩!就像常规的井字游戏一样,这个游戏是在一块3×3的棋盘上进行的,只是与仅用X和O不同,每个格子用一个A⋯Z之间的字母标记,表示占有这个格子的奶牛名字的首字母。

以下是一个棋盘的例子:

COW
XXO
ABC

这些奶牛会在她们迷惑于如何判断胜负之前就占满这九个格子。显然,就像常规的井字游戏一样,如果任何一头奶牛占有了一整行、一整列,或是一整条对角线,那么这头奶牛就获胜了。然而,由于奶牛认为多牛游戏中这并不容易出现,所以她们决定允许奶牛组成两牛一队,如果某一行、一列,或是一条对角线仅包含一队的两头奶牛的字母,并且同时包含了这两头奶牛(不仅仅是一头)的字母,那么这一队就获胜。

请帮助奶牛们判断有多少头奶牛或是两头奶牛组成的队伍可以获胜。注意棋盘上的同一个格子可能在不同奶牛或队伍的获胜中均被用到。

输入格式:

输入包含三行,每行三个 A⋯Z之间的字符。

输出格式:

输出包含两行。第一行,输出能够获胜的单独的奶牛的数量。第二行,输出能够获胜的两头奶牛组成的队伍的数量。

样例:

输入样例:

COW
XXO
ABC

输出样例:

0
2 

分析:

这道题思路很简单,但是代码容易敲复杂。

其实这道题用set挺简单的。

统计三个字母中有多少个不同字母时,用s.insert()将每个字母存入,因为set自带去重,所以s.size()即为所求,比传统的bool x[26]简单的多,时间也慢一些。

统计组数的去重也可用set存储。

代码实现:

#include <bits/stdc++.h>
using namespace std;
#define _for(i, a, b) for (int i = (a); i < (int)(b); ++i)
const int W = 3;
vector<string> G(W);
using SC = set<char>;
set<SC> Win[W];
void find(const vector<pair<int, int>>& ps) {  // 一条线的坐标SC s;  // 一条线上的字母判重统计for (auto p : ps) s.insert(G[p.first][p.second]);if (s.size() <= 2) Win[s.size()].insert(s);  // 这条线上有几个字母
}
int main() {ios::sync_with_stdio(false), cin.tie(0);_for(r, 0, W) cin >> G[r];_for(r, 0, W) find({{r, 0}, {r, 1}, {r, 2}});  // 统计第r行的字母_for(r, 0, W) find({{0, r}, {1, r}, {2, r}});  // 统计第r列的字母find({{0, 0}, {1, 1}, {2, 2}});                // 两条对角线find({{2, 0}, {1, 1}, {0, 2}});cout << Win[1].size() << endl;cout << Win[2].size() << endl;
}

狠减单叭~~~~biu~biu~~

Team Tic Tac Toe--数据结构set的妙用相关推荐

  1. react中使用构建缓存_通过在React中构建Tic Tac Toe来学习ReasonML

    react中使用构建缓存 3. 7. 2018: UPDATED to ReasonReact v0.4.2 3. 7. 2018:更新为ReasonReact v0.4.2 You may have ...

  2. python井字棋游戏代码_Python实现的井字棋(Tic Tac Toe)游戏示例

    Python实现的井字棋(Tic Tac Toe)游戏示例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python实现的井字棋(Tic Tac Toe)游戏示 ...

  3. C++ 很有趣:编写一个井字游戏 (Tic Tac Toe)

    英文原文:C++ is fun: Writing a Tic Tac Toe Game 这个有趣的C++系列打算展示一下使用C++写代码可以和其他主流语言一样高效而有趣.在第二部分,我将向你展示使用C ...

  4. python二维游戏示例_Python实现的井字棋(Tic Tac Toe)游戏示例

    本文实例讲述了Python实现的井字棋(Tic Tac Toe)游戏.分享给大家供大家参考,具体如下: 说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码 ...

  5. python游戏代码运行不了_无法使我的tic tac toe游戏在python中正确运行

    转不到"玩家1"的原因是你的支票中缺少一个空格.你也没有正确地检查一个玩家何时获胜,这就是为什么你会有这种奇怪的行为.你需要检查每个位置,而不仅仅是最后一个.我还添加了对用户输入的 ...

  6. Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy

    1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/principlescomputin ...

  7. amazon.设计1. tic tac toe

    //不觉中 已经全力找工作好久好久了.大概有1年半了.身心疲惫,不要放弃.曙光快来了. 1.tic tac toe //http://www.ntu.edu.sg/home/ehchua/progra ...

  8. python井字棋ai,python 井字棋(Tic Tac Toe)

    说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...

  9. 《数据结构与算法分析》回溯算法之博弈——三连棋(tic tac toe)人机对战AI设计(αβ枝减)

    前言: 这次的回溯算法实在是太有意思了,不过刚刚接触的时候确实不容理解,极小极大策略,αβ枝减看了好几遍才明白整个过程.实现的时候又发现还有细节不明白,想明白之后对于整体的认识又加深了一步. 编码的过 ...

  10. 圈叉游戏 java_【炫光圈叉棋】炫光圈叉棋 Tic Tac Toe Glow 1.8.1下载_安卓(android)软件下载-魅族溜...

    一款炫光风格的圈叉棋游戏,支持单/双人模式.圈叉棋,英文:tic-tac-toe,别名:圈叉游戏.是一种游戏,3*3的9个方格子,先下者画圈,后下者画叉,每人可以在任意没有对方棋子的封闭方格里下一次, ...

最新文章

  1. Python3 与 C# 并发编程之~ Net篇
  2. (转)详解css3弹性盒模型(Flexbox)
  3. mac端addr2line的NDK位置和使用
  4. 动态规划---实现输出最大公共子序列的长度以及输出最大子字符串(java语言描述)
  5. java 四字节uid,Java入门教程-序列化版本号serialVersionUID的作用
  6. python数据分析函数大全_Python常用数据分析函数集合
  7. pvrect r语言 聚类_R语言常用统计方法包+机器学习包(名称、简介)
  8. SAP License:2021年:传统ERP丧钟响起
  9. 期望dp+高斯消元——bzoj3143
  10. Mac版Java反编译工具jd-gui解压即用
  11. 电赛校赛经验-程控风力摆
  12. 产品需求分析神器:KANO模型分析法
  13. C++不知算法系列之解析回溯算法中的人文哲学
  14. 人大金仓windows 10 安装闪退,改绿色安装方法,
  15. 任务11 雷达与超声波感应灯(arduino程序)
  16. sim卡换新卡显示无服务器,SIM卡又现新漏洞 SIM卡无服务 SIM卡被锁怎么办?
  17. recommenderlab:构建基于R的推荐系统
  18. python折叠次数计算、一张纸5毫米_一张纸最多能对折多少次?科学家:折上100次就能到达宇宙边缘...
  19. PC_二进制移位运算/定点数移位/算数移位及其移位后的空位添补规则/机器数位数扩充
  20. 无意中发现我这个北漂的几张照片

热门文章

  1. 关于ios9中得AddressBook和AddressBookUI框架过时问题
  2. 水花兄弟(Splash Brothers)
  3. mysql数据库安全开关_对MySQL数据库的安全进行的详述
  4. 有损脑健康的七种坏习惯
  5. android use-feature和market策略
  6. 简洁桌面(使用Windows自带的桌面整理功能)
  7. 计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)
  8. android studio怎么后退,Android Studio:上一个活动的后退按钮
  9. jenkins编译java项目时无法读取pom.xml文件
  10. 秒懂设计模式之原型模式(Prototype Pattern)