题目大意:给出一个矩阵由.,*组成,求里面一个最小的子矩阵能够包含所有*
解题思路:找出最靠近左上方的*和最靠近右下方的*号,截出那个矩阵就可以了。
~~o(∩_∩)o ~不为切题而切题~~,是为纪念第一道CF题和第一次使用STL而写!!!
代码:
1#include <iostream>
2#include <cstdio>
3#include <cstring>
4#include <string>
5
6using namespace std;
7
8string s[60];
9int i,j,maxx,maxy,minx,miny,n,m;
10
11int main()
12{
13 while (~scanf("%d%d",&n,&m))
14 {
15 minx=1<<30;
16 miny=1<<30;
17 maxx=-(1<<30);
18 maxy=-(1<<30);
19 for (i=1; i<=n; i++)
20 {
21 cin >> s[i];
22 int pos=s[i].find("*");
23 if (pos!=string::npos)
24 {
25 if (minx>pos) minx=pos;
26 int pos1=0;
27 for (int l=0; l<s[i].size(); l++)
28 if (s[i][l]=='*') pos1=l;
29 if (maxx<pos1) maxx=pos1;
30 if (miny>i) miny=i;
31 if (maxy<i) maxy=i;
32 }
33 }
34 for (i=miny; i<=maxy; i++)
35 {
36 for (j=minx; j<=maxx; j++)
37 printf("%c",s[i][j]);
38 cout << endl;
39 }
40
41 }
42}
43