zoukankan      html  css  js  c++  java
  • 西南民族大学第十一届程序设计竞赛(同步赛)【金牌厨师HiLin与HJGG】预处理二维数组前缀和+二分

     思路:预处理出二维数组前缀和,然后二分即可。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define int long long
     4 #define inf 0x3f3f3f3f3f
     5 #define N 6666
     6 int mp[N][N];
     7 int sum[N][N];//二维数组前缀和·
     8 int n,k;
     9 int check(int m){
    10     int f=0;
    11     for(int i=m;i<=n;i++){
    12         for(int j=m;j<=n;j++){
    13             int temp=sum[i][j]-sum[i-m][j]-sum[i][j-m]+sum[i-m][j-m];
    14             if(temp>=k){
    15                 f=1;
    16                 break;
    17             }
    18         }
    19         if(f){
    20             break;
    21         }
    22     }
    23     return f;
    24 }
    25 signed main(){
    26     cin>>n>>k;
    27     for(int i=1;i<=n;i++)
    28         for(int j=1;j<=n;j++)
    29             scanf("%lld",&mp[i][j]);
    30     for(int i=1;i<=n;i++){
    31         for(int j=1;j<=n;j++){
    32             sum[i][j]=mp[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
    33         }
    34     }
    35     int l=0;
    36     int r=n;
    37     int ans=n+1;
    38     while(l<=r){
    39         int mid=(l+r)/2;
    40         if(check(mid)){
    41             r=mid-1;
    42             ans=min(ans,mid);
    43         }else{
    44             l=mid+1;
    45         }
    46     }
    47      
    48     if(ans==n+1){
    49         cout<<"I'm a Gold Chef!";
    50     }else{
    51         cout<<ans;
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    <剑指OFFER18> 18_01_DeleteNodeInList在O(1)时间删除链表结点
    哈夫曼树

    快速排序
    冒泡算法
    Java 缓存机制
    JAVA NIO
    string、stringbuilder、stringbuffer区别
    Java内存泄露的问题调查定位
    使用hibernate 框架搭建的helloworld
  • 原文地址:https://www.cnblogs.com/pengge666/p/12175047.html
Copyright © 2011-2022 走看看