题目:
时间限制 : 1 Sec
内存限制 : 32 Mb
提交 : 439
解决 : 178
题目描述
小 X 在解决了高大上的落子问题后, 开始着手训练 BetaGo 的深度学习 能力, 第一步要教 BetaGo识别各种各样的棋形,小 X 首先教 BetaGo 识别跟死活密切相关的棋型,在成功识别了一些简单的棋形后, BetaGo 在识别聚四棋形时遇到了困难,所谓聚四棋形就是连在一起的四颗棋子, 它们共有五种不同的形状, 五种棋形及其命名如下图所示:
注意: 每种形状经过旋转、翻折得到的图案属于同一种形状。 譬如只要四颗相邻的棋子排成一条直线则不管它们是横着排还是竖着排都称之为直四。
小 X 希望你编一个程序帮助 BetaGo 识别聚四棋形, 具体要求是:给出四个连在一起的围棋盘上的交叉点位置, 判断这四颗连在一起的棋子属于那种聚四? 输入数据保证给出的棋形一定是五种聚四棋形中的一种。 棋盘上位置的表示方法与第一题相同。
输入
输入数据共有四行,每行包含两个用空格隔开的正整数 x 和 y, 表示棋盘上的一颗棋子的位置。
输出
输出一行包含一个字符串, 表示对应的聚四棋形的拼音。
如果是直四 , 则输出“ zhisi” ; 如果是曲四, 则输出“ qusi” ; 如果是弯四, 则输出“ wansi” ;
如果是丁四, 则输出“dingsi” ; 如果是方四, 则输出“fangsi” 。 注意引号不要输出。
样例输入
1 1 1 2 2 3 2 2
样例输出
wansi
【数据范围】
1≤x≤4, 1≤y≤4,每种棋形分别对应 20% 的数据,也就是说你直接输出某种拼音可以得到 20 分。
方法:
1、所输入的x、y分别排序,然后根据规律来输出。(自己观察)
2、其中,“qusi”和“dingsi”需要通过x、y中重复的个数来判断,“wansi”和“fangsi”也可以用重复次数判断。
标程:
#include<bits/stdc++.h>
using namespace std;
int x[100],y[100],s1,s2,t;
int main()
{
for (int i=1;i<=4;i++)
{
cin>>x[i]>>y[i];
}
sort(x+1,x+5);
sort(y+1,y+5);
t=1;
if ((x[1]==x[2])&&(x[3]==x[2])&&(x[3]==x[4])||(y[1]==y[2])&&(y[3]==y[2])&&(y[3]==y[4]))
{
cout<<"zhisi"<<endl;
return 0;
}
s1=0;
s2=0;
for (int i=1;i<=3;i++)
{
for (int j=i+1;j<=4;j++)
{
if (x[i]==x[j])s1+=1;
if (y[i]==y[j])s2+=1;
}
}
if ((s1==2)&&(s2==2))
{
cout<<"fangsi"<<endl;
return 0;
}
if (s1==3)
{
for (int i=1;i<=3;i++)
{
if (y[i]==y[i+1])
{
if (i==2)
{
cout<<"dingsi"<<endl;
return 0;
}
else
{
cout<<"qusi"<<endl;
return 0;
}
}
}
}
if (s2==3)
{
for (int i=1;i<=3;i++)
{
if (x[i]==x[i+1])
{
if (i==2)
{
cout<<"dingsi"<<endl;
return 0;
}
else
{
cout<<"qusi"<<endl;
return 0;
}
}
}
}
if ((s1==1)||(s2==1))
{
cout<<"wansi"<<endl;
return 0;
}
return 0;
}