解题报告:
题目大意:五虎棋是一种棋,规则这里就不说了,现在给出一种一种棋盘的局面图,问题是分别求出两方所得到的分数。
模拟题,我是直接暴力将每种情况都枚举出来,先定义一个map[][]数组,将棋盘局面存起来,然后对每一种可以得分的方案进行判断,因为数据量不大,一共就25个点。代码可能会有点长。。。。。
View Code
1 #include<stdio.h> 2 #include<string.h> 3 char map[6][6]; 4 int bigtiger(char ch) { 5 if(map[1][1]==ch&&map[1][5]==ch&&map[3][3]==ch&&map[5][1]==ch&&map[5][5]==ch) 6 return 10; 7 else 8 return 0; 9 } 10 int tiger(char ch) { 11 int sum=0; 12 for(int i=1;i<=3;++i) 13 for(int j=1;j<=3;++j) { 14 if(map[i][j]==ch&&map[i][j+2]==ch&&map[i+1][j+1]==ch&&map[i+2][j]==ch&&map[i+2][j+2]==ch) 15 sum+=5; 16 } 17 return sum; 18 } 19 int tongtian(char ch) { 20 int sum=0; 21 for(int i=1;i<=5;++i) 22 if(map[i][1]==ch&&map[i][2]==ch&&map[i][3]==ch&&map[i][4]==ch&&map[i][5]==ch) 23 sum+=5; 24 for(int i=1;i<=5;++i) 25 if(map[1][i]==ch&&map[2][i]==ch&&map[3][i]==ch&&map[4][i]==ch&&map[5][i]==ch) 26 sum+=5; 27 if(map[1][5]==ch&&map[2][4]==ch&&map[3][3]==ch&&map[4][2]==ch&&map[5][1]==ch) 28 sum+=5; 29 if(map[1][1]==ch&&map[2][2]==ch&&map[3][3]==ch&&map[4][4]==ch&&map[5][5]==ch) 30 sum+=5; 31 return sum; 32 } 33 int sixie(char ch) { 34 int sum=0; 35 if(map[1][4]==ch&&map[2][3]==ch&&map[3][2]==ch&&map[4][1]==ch) 36 sum+=4; 37 if(map[2][1]==ch&&map[3][2]==ch&&map[4][3]==ch&&map[5][4]==ch) 38 sum+=4; 39 if(map[2][5]==ch&&map[3][4]==ch&&map[4][3]==ch&&map[5][2]==ch) 40 sum+=4; 41 if(map[1][2]==ch&&map[2][3]==ch&&map[3][4]==ch&&map[4][5]==ch) 42 sum+=4; 43 return sum; 44 } 45 int sanxie(char ch) { 46 int sum=0; 47 if(map[1][3]==ch&&map[2][2]==ch&&map[3][1]==ch) 48 sum+=3; 49 if(map[3][1]==ch&&map[4][2]==ch&&map[5][3]==ch) 50 sum+=3; 51 if(map[3][5]==ch&&map[4][4]==ch&&map[5][3]==ch) 52 sum+=3; 53 if(map[1][3]==ch&&map[2][4]==ch&&map[3][5]==ch) 54 sum+=3; 55 return sum; 56 } 57 int xiaodou(char ch) { 58 int sum=0; 59 for(int i=1;i<=4;++i) 60 for(int j=1;j<=4;++j) 61 if(map[i][j]==ch&&map[i][j+1]==ch&&map[i+1][j]==ch&&map[i+1][j+1]==ch) 62 sum+=1; 63 return sum; 64 } 65 int main() { 66 int T; 67 scanf("%d",&T); 68 while(T--) { 69 int ans1=0,ans2=0; 70 for(int i=1;i<=5;++i) 71 scanf("%s",map[i]+1); 72 ans1=bigtiger('x')+tiger('x')+tongtian('x')+sixie('x')+sanxie('x')+xiaodou('x'); 73 ans2=bigtiger('o')+tiger('o')+tongtian('o')+sixie('o')+sanxie('o')+xiaodou('o'); 74 printf("%d %d\n",ans1,ans2); 75 } 76 return 0; 77 }