每日一题——组队井字游戏

  • Post author:
  • Post category:其他


题目地址:

https://www.acwing.com/problem/content/1727/

在这里插入图片描述


输入样例:

COW
XXO
ABC


输出样例:

0
2



思路

利用set去重的性质,我们建立两个集合分别是



s

s

ss






s


s









d

s

ds






d


s





,分别存一头牛获胜和两头牛获胜的组合的值,其中



d

s

ds






d


s





集合中我是存



p

a

i

r

pair






p


a


i


r





类型。

主要也就是枚举三种连线情况:

1)横着连线

2)竖着连线

3)斜着连线,其中分为从左上到右下,以及左下到右上



代码

#include<bits/stdc++.h>
#include<algorithm>
#define pii pair<char,char>
#define inf 1e9
using namespace std;
const int N = 2010;
char p[4][4];
set<char>ss;
set<pii>ds;
set<char>s;
void solve(){
	for(int i = 0;i < 3;i++)for(int j = 0;j < 3;j++)cin>>p[i][j];
	for(int i = 0;i < 3;i++){
		for(int j = 0;j < 3;j++){
			s.insert(p[i][j]);
		}
		if(s.size()==2){
			auto it = s.begin(), et = (++s.begin());
			ds.insert({min(*it,*et),max(*it,*et)});
		}
		else if(s.size()==1){ss.insert(*s.begin());}
		s.clear();
	}
	for(int i = 0;i < 3;i++){
		for(int j = 0;j < 3;j++){
			s.insert(p[j][i]);
		}
		if(s.size()==2){
			auto it = s.begin(), et = (++s.begin());
			ds.insert({min(*it,*et),max(*it,*et)});
		}
		else if(s.size()==1){ss.insert(*s.begin());}
		s.clear();
	}
	for(int i = 0;i < 3;i++){s.insert(p[i][i]);}
	if(s.size()==2){
		auto it = s.begin(), et = (++s.begin());
		ds.insert({min(*it,*et),max(*it,*et)});
	}
	else if(s.size()==1){ss.insert(*s.begin());}
	s.clear();
	for(int i = 2;i >=0;i--){s.insert(p[2-i][2-i]);}
	if(s.size()==2){
		auto it = s.begin(), et = (++s.begin());
		ds.insert({min(*it,*et),max(*it,*et)});
	}
	else if(s.size()==1){ss.insert(*s.begin());}
	s.clear();
	cout<<ss.size()<<"\n"<<ds.size()<<"\n";
}
int main(){
	solve();
	return 0;
}



版权声明:本文为qq_52800184原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。