首页 > 代码库 > HNU 12906 Battleship

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