zoukankan      html  css  js  c++  java
  • 题解 CF22B 【Bargaining Table】

    NOIO2 要来了,考前要练练暴力,要不挂了怎么办呢


    因为(1le n,m le 25) 的数据范围,我们可以写一个暴力。枚举矩形的左上端点和右下端点,然后判断边框是否有1,如果合法就取(max),否则就break

    Tips:

    1. 注意是判断边框即可。
    2. 在判断边框的时,可以用 4 个 while 猛冲,如果中途结束,那么说明边框不合法。
    3. 枚举左上端点((x1,y1))和右下端点((x2,y2))时注意(x2ge x1,y2ge y1)
    #include<bits/stdc++.h>
    using namespace std;
    char ch[30][30];
    int ans;
    int main() {
    	int n,m;
    	cin>>n>>m;
    	for(int i=1;i<=n;i++) {
    		for(int j=1;j<=m;j++) {
    			cin>>ch[i][j];
    		}
    	}
    	for(int i=1;i<=n;i++) {
    		for(int j=1;j<=m;j++) {
    			for(int k=i;k<=n;k++) {
    				for(int l=j;l<=m;l++) {
    					int I=i,J=j;
    					while(J<l&&ch[I][J]=='0') J++;
    					if(J!=l) break;
    					while(I<k&&ch[I][J]=='0') I++;
    					if(I!=k) break;
    					while(J>j&&ch[I][J]=='0') J--;
    					if(J!=j) break;
    					while(I>i&&ch[I][J]=='0') I--;
    					if(I!=i) break;
    					ans=max(ans,2*(k-i+1+l-j+1));
    				}
    			}
    		}
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    c/c++(c++和网络编程)日常积累(二)
    docker日常积累
    c/c++日常积累
    qt日常积累
    YUV相关积累
    02-asio学习
    01--c实现基础客户端和服务端与c++ boost.asio实现对比
    webrtc学习笔记积累
    linux-日常工作积累
    用Java链接SQL Server
  • 原文地址:https://www.cnblogs.com/ahawzlc/p/12837469.html
Copyright © 2011-2022 走看看