当前位置:编程学习 > C/C++ >>

CF-192-diy-2

题目意思:

给一个r*c的矩阵方格,有些位置有S,如果某一行和一列都不含标记为S的方格,则可以把该行所有方格都收掉,问最多能收多少个方格,方格可以收多次,多次收的方格计数一次。

解题思路:

暴力

代码:


[cpp]
<SPAN style="FONT-SIZE: 18px">#include<iostream> 
#include<cmath>  
#include<cstdio>  
#include<cstdlib>  
#include<string>  
#include<cstring>  
#include<algorithm>  
#include<vector>  
#include<map>  
#include<set>  
#include<stack>  
#include<list>  
#include<queue>  
#define eps 1e-6  
#define INF 0x1f1f1f1f  
#define PI acos(-1.0)  
#define ll __int64  
#define lson l,m,(rt<<1)  
#define rson m+1,r,(rt<<1)|1  
using namespace std; 
 
/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
*/ 
 
char save[15][15]; 
bool flag[15][15]; 
struct Point 

   int x,y; 
}pp[120]; 
 
int main() 

   int r,c; 
 
   while(scanf("%d%d",&r,&c)!=EOF) 
   { 
      int cnt=0; 
      memset(flag,false,sizeof(flag)); 
      for(int i=1;i<=r;i++) 
      { 
         scanf("%s",save[i]+1); 
         for(int j=1;j<=c;j++) 
         { 
            if(save[i][j]=='S') 
            { 
               pp[++cnt].x=i; 
               pp[cnt].y=j; 
            } 
         } 
      } 
      for(int i=1;i<=r;i++) //扫描每一行  
      { 
         bool ff=true; 
         for(int j=1;j<=c;j++) //如果都没有S,则标记这一行  
            if(save[i][j]=='S') 
            { 
               ff=false; 
               break; 
            } 
         if(ff) 
            memset(flag[i],true,sizeof(flag[i]));//表示能收  
      } 
      for(int i=1;i<=c;i++) //扫描每一列  
      { 
         bool ff=true; 
         for(int j=1;j<=r;j++) 
            if(save[j][i]=='S') 
            { 
               ff=false; 
               break; 
            } 
         if(ff) 
            for(int j=1;j<=r;j++) //标记这一列  
               flag[j][i]=true; 
      } 
 
      int ans=0; 
      for(int i=1;i<=r;i++) 
         for(int j=1;j<=c;j++) 
            if(flag[i][j]) //统计计数  
               ans++; 
      printf("%d\n",ans); 
   } 
   return 0; 

 
</SPAN> 

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#define eps 1e-6
#define INF 0x1f1f1f1f
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
using namespace std;

/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
*/

char save[15][15];
bool flag[15][15];
struct Point
{
   int x,y;
}pp[120];

int main()
{
   int r,c;

   while(scanf("%d%d",&r,&c)!=EOF)
   {
      int cnt=0;
      memset(flag,false,sizeof(flag));
      for(int i=1;i<=r;i++)
      {
         scanf("%s",save[i]+1);
         for(int j=1;j<=c;j++)
         {
            if(save[i][j]=='S')
            {
               pp[++cnt].x=i;
               pp[cnt].y=j;
            }
         }
      }
      for(int i=1;i<=r;i++) //扫描每一行
      {
         bool ff=true;
         for(int j=1;j<=c;j++) //如果都没有S,则标记这一行
            if(save[i][j]=='S')
            {
     &n

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,