HNU 12906 Battleship

题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12906

解题报告:题目意思看了很久都没懂,就是一个10*10的方格,然后上面要放一些船,船的规格分别是1艘占4个格子的船,2艘占3个格子的,3艘占2  个格子的,4艘占一个格子的。然后输入是一个10*10的矩阵,数字都是1-100的数,数字表示将在哪个时刻会打到这个位置,当一艘船的每一个格子都被打中之后,这艘船就会下沉,要求两艘船之间不能相邻,然后让你求最复杂的船的排列方法,就是在这里,到底什么是最复杂的排列方法,真吭,原来就是要让你求这个矩阵上面要在最后才没有船的排列方法,这不就是只要在100那个位置一定要放船不就行了。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 int map[11][11];
 8 char ans[11][11],temp[11][11];
 9 
10 int main()
11 {
12 //    freopen("in.txt","r",stdin);
13     for(int i = 1;i <= 10;++i)
14     for(int j = 1;j <= 10;++j)
15     {
16         scanf("%d",&map[i][j]);
17         ans[i][j] = temp[i][j] = '.';
18     }
19     ans[1][1] = ans[1][3] = ans[1][5]  = '#';
20     ans[2][1] = ans[2][2] = '#';
21     ans[2][4] = ans[2][5] = '#';
22     ans[2][7] = ans[2][8] = '#';
23     ans[3][1] = ans[3][2] = ans[3][3] = '#';
24     ans[3][5] = ans[3][6] = ans[3][7] = '#';
25     ans[4][1] = ans[4][2] = ans[4][3] = ans[4][4] = '#';
26     int x,y;
27     for(int i = 1;i <= 10;++i)
28     for(int j = 1;j <= 10;++j)
29     if(map[i][j] == 100)
30     {
31         x = i,y = j;
32         temp[i][j] = '#';
33         break;
34     }
35     int f = 1;
36     for(int i = (x&1)? 1:2;i <= 10;i+=2)
37     if(abs(i-x) > 1)
38     {
39         for(int j = 1;j <= 10;++j)
40         temp[i][j] = ans[f][j];
41         f++;
42         if(f > 4) break;
43     }
44     for(int i = 1;i <= 10;++i)
45     {
46         temp[i][11] = NULL;
47         puts(temp[i]+1);
48     }
49     return 0;
50 }
View Code

 

posted @ 2014-08-18 11:12  xiaxiaosheng  阅读(184)  评论(0编辑  收藏  举报