ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2019 GDUT RC 3 Problem C(题解)

2019-02-23 13:52:17  阅读:308  来源: 互联网

标签:GDUT 题目 头牛 int 题解 char 组队 2019 include


原题

题目大意

题目背景是给一个九宫格棋局,棋局里面的相同字母表示同一头牛下的棋,让你判断有多少头牛是个体赢的,有多少头牛组队赢的,组队赢的是指若同一行是xxo,这时候o和x组队他们就占据了一行,即赢.组队只能两头牛之间组.

题目分析

有题意可知,只需要扫一下所有胜利情况即可,不过需要注意的是如果是同一头牛或同一组牛取得的胜利不能叠加.例如牛a已经赢了一次了,后面又扫到牛a赢了,这时候ans不能再+1.

代码

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <iostream>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <vector>
 7 #include <string>
 8 #include <utility>
 9 #include <queue>
10 #include <stack>
11 const int INF=0x3f3f3f3f;
12 using namespace std;
13 
14 char map[3][3];
15 char a[3]; //用来记录谁赢的 
16 int cnt;
17 
18 void add(char x) //用来记录谁赢的 
19 {
20     for(int i=0;i<cnt;i++)
21         if(a[i]==x) return;
22     a[cnt++]=x;
23 }
24 //标记数组,用来标记已经取得胜利的牛. 
25 int v[25];
26 int vt[25][25];
27 
28 int main()
29 {
30     for(int i=0;i<3;i++)
31     {
32         for(int j=0;j<3;j++)
33             cin>>map[i][j];
34         getchar();
35     }
36     int ans=0,res=0;
37     for(int i=0;i<3;i++)//扫一遍横的 
38     {
39        cnt=0;
40        for(int j=0;j<3;j++)
41         add(map[i][j]);
42         if(cnt==1&&!v[a[0]-'A']) ans++,v[a[0]-'A']=1;
43         if(cnt==2&&!vt[a[0]-'A'][a[1]-'A']) res++,vt[a[0]-'A'][a[1]-'A']=vt[a[1]-'A'][a[0]-'A']=1;
44         memset(a,0,sizeof(a));  
45     }
46 
47     for(int j=0;j<3;j++)//扫一遍竖的 
48     {
49         cnt=0;
50         for(int i=0;i<3;i++)
51             add(map[i][j]);
52         if(cnt==1&&!v[a[0]-'A']) ans++,v[a[0]-'A']=1;
53         if(cnt==2&&!vt[a[0]-'A'][a[1]-'A']) res++,vt[a[0]-'A'][a[1]-'A']=vt[a[1]-'A'][a[0]-'A']=1;
54         memset(a,0,sizeof(a));
55     }
56 
57     cnt=0;
58     for(int i=0;i<3;i++) //扫一遍正对角线 
59     {
60         add(map[i][i]);
61     }
62     if(cnt==1&&!v[a[0]-'A']) ans++,v[a[0]-'A']=1;
63         if(cnt==2&&!vt[a[0]-'A'][a[1]-'A']) res++,vt[a[0]-'A'][a[1]-'A']=vt[a[1]-'A'][a[0]-'A']=1;
64         memset(a,0,sizeof(a));
65 
66     cnt=0;
67     for(int i=0;i<3;i++) //扫一遍副对角线 
68     {
69         add(map[i][2-i]);
70     }
71     if(cnt==1&&!v[a[0]-'A']) ans++,v[a[0]-'A']=1;
72         if(cnt==2&&!vt[a[0]-'A'][a[1]-'A']) res++,vt[a[0]-'A'][a[1]-'A']=vt[a[1]-'A'][a[0]-'A']=1;
73         memset(a,0,sizeof(a));
74 
75     cout<<ans<<endl<<res<<endl;
76     return 0;
77 }

 

 

 

标签:GDUT,题目,头牛,int,题解,char,组队,2019,include
来源: https://www.cnblogs.com/VBEL/p/10422426.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有