2023/5/14学习总结

这道题我们可以看到数据范围很小 ,所以可以使用暴力枚举,将所有可以组成长方形的长宽全遍历一遍,同时要满足这个长方形里没有障碍物的条件,取得周长最大值

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string mp[30];
bool solve(int i ,int j ,int k,int l){
	for(int m=i;m<=k;m++){
		for(int n=j;n<=l;n++){
			if(mp[m][n]=='1') return false;
		}
	}
	return true;
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++){
			cin>>mp[i];
	}
	int res=0;
	for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                for(int k=i;k<n;k++){
                    for(int l=j;l<m;l++){
                        if(solve(i,j,k,l)&&((k-i+1)*2+2*(l-j+1))>res){
                            res=(k-i+1)*2+2*(l-j+1);
                        }
                    }
                }
            }
     }
     cout<<res<<endl;
}

首先先特判,当m=1且n=1和n<=m的情况下 ,是可能会导致比赛永远不会结束的,然后我们遍历一遍

2~m,如果能满足n%i,则比赛可能会导致永远不会结束。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define maxn 1000000

int main()
{
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		int f=0;
		if(n==1||m==1){
			cout<<"YES"<<endl;
		}else if(m>=n) cout<<"NO"<<endl;
		 else{
		for(int i=2;i<=m&&i<=n/i;i++){
			if(n%i==0){
				f=1;
			}
		}
		if(f==0) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
}
}

猜你喜欢

转载自blog.csdn.net/m0_63263973/article/details/130676271