西南民族大学第十一届程序设计竞赛 L.金牌厨师HiLin与HJGG

西南民族大学第十一届程序设计竞赛 L.金牌厨师HiLin与HJGG

题目描述

(略)

输入描述:

(略)

输出描述:

如果能找到满足条件的答案,输出这个矩阵的阶数m,如果没有能满足HJGG要求的矩阵,HiLin也不会吃了,并表示自己是金牌厨师,自己做饭吃,输出:“I’m a Gold Chef!”(不包括引号)

示例1

输入

3 5
1 2 3
4 5 6
7 8 9

输出

1

示例2

输入

3 5
1 0 0 
0 4 0
0 0 0

输出

2

示例3

输入

1 2
1

输出

I'm a Gold Chef!

比赛时没有想到二分,现在来补一下……

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

ll a[maxn][maxn],k;
int n;

void init(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            a[i][j]+=a[i][j-1]+a[i-1][j]-a[i-1][j-1];
        }
    }
}

bool judge(int x){
    for(int i=x;i<=n;i++){
        for(int j=x;j<=n;j++){
            if((a[i][j]-a[i-x][j]-a[i][j-x]+a[i-x][j-x])>=k) {
                return 1;
            }
        }
    }
  return 0;
}

int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            scanf("%lld",&a[i][j]);
        }
    }
    init();
    int l=1,r=n,ans=0;
    while(l<=r){
        int mid=r+l>>1;
        if(judge(mid)){
            ans=mid;
            r=mid-1;
        }
        else l=mid+1;
    }
    if(ans) cout<<ans;
    else cout<<"I'm a Gold Chef!";
    return 0;
}
发布了235 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43765333/article/details/103777308