题目大意:给出一个矩阵由.,*组成,求里面一个最小的子矩阵能够包含所有*
解题思路:找出最靠近左上方的*和最靠近右下方的*号,截出那个矩阵就可以了。
             ~~o(∩_∩)o ~不为切题而切题~~,是为纪念第一道CF题和第一次使用STL而写!!!
代码:
 1 #include <iostream>
#include <iostream>
 2 #include <cstdio>
#include <cstdio>
 3 #include <cstring>
#include <cstring>
 4 #include <string>
#include <string>
 5
 6 using namespace std;
using namespace std;
 7
 8 string s[60];
string s[60];
 9 int i,j,maxx,maxy,minx,miny,n,m;
int i,j,maxx,maxy,minx,miny,n,m;
10
11 int main()
int main()
12

 {
{
13 while (~scanf("%d%d",&n,&m))
   while (~scanf("%d%d",&n,&m))
14
 
    {
{
15 minx=1<<30;
      minx=1<<30;
16 miny=1<<30;
      miny=1<<30;
17 maxx=-(1<<30);
      maxx=-(1<<30);
18 maxy=-(1<<30);
      maxy=-(1<<30);
19 for (i=1; i<=n; i++)
      for (i=1; i<=n; i++)
20
 
         {
{
21 cin >> s[i];
            cin >> s[i];
22 int pos=s[i].find("*");
            int pos=s[i].find("*");
23 if (pos!=string::npos)
            if (pos!=string::npos)
24
 
               {
{
25 if (minx>pos) minx=pos;
                 if (minx>pos) minx=pos;
26 int pos1=0;
                 int pos1=0;
27 for (int l=0; l<s[i].size(); l++)
                 for (int l=0; l<s[i].size(); l++)
28 if (s[i][l]=='*') pos1=l;
                   if (s[i][l]=='*') pos1=l;
29 if (maxx<pos1) maxx=pos1;
                 if (maxx<pos1) maxx=pos1;
30 if (miny>i) miny=i;
                 if (miny>i) miny=i;
31 if (maxy<i) maxy=i;
                 if (maxy<i) maxy=i;
32 }
              }
33 }
        }
34 for (i=miny; i<=maxy; i++)
     for (i=miny; i<=maxy; i++)
35
 
        {
{
36 for (j=minx; j<=maxx; j++)
           for (j=minx; j<=maxx; j++)
37 printf("%c",s[i][j]);
             printf("%c",s[i][j]);
38 cout << endl;
           cout << endl;
39 }
       }
40
41 }
   }
42 }
}
43