Submission #7582268


Source Code Expand

#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#define REP(i,n) for(int i=0;i<n;i++)
#define REPP(i,n) for(int i=1;i<=n;i++)
#define ALL(obj) (obj).begin(), (obj).end()
const double PI = acos(-1);
const double EPS = 1e-15;
long long INF=(long long)1E17;
#define i_7 (long long)(1E9+7)
long mod(long a){
    long long c=a%i_7;
    if(c>=0)return c;
    return c+i_7;
}
using namespace std;
bool prime_(int n){
  if(n==1){
    return false;
  }else if(n==2){
    return true;
  }else{
    for(int i=2;i<=sqrt(n);i++){
      if(n%i==0){
        return false;
      }
    }
    return true;
  }
}

long long gcd_(long long a, long long b){
  if(a<b){
    swap(a,b);
  }
  if(a%b==0){
    return b;
  }else{
    return gcd_(b,a%b);
  }
}
 
long long lcm_(long long x, long long y){
  return (x/gcd_(x,y))*y;
}

int main(){
  
  int n;
  cin>>n;
  int d[n][n];
  REP(i,n){
    REP(j,n){
      cin>>d[i][j];
    }
  }
  int dsum[n][n];
  REP(i,n){
    REP(j,n){
      if(i==0 && j==0){
        dsum[i][j] = d[i][j];
      }else if(i==0){
        dsum[i][j] = dsum[i][j-1] + d[i][j];
      }else if(j==0){
        dsum[i][j] = dsum[i-1][j] + d[i][j];
      }else{
        dsum[i][j] = dsum[i-1][j] + dsum[i][j-1] - dsum[i-1][j-1] + d[i][j];
      }
    }
  }
  int max_area[n*n+1] = {};
  int temp;
  int now;
  bool flag;
  REPP(s,n*n){
    temp = 0;
    for(int a=1;a<=s;a++){
      if(s%a != 0)continue;
      int b = s/a;
      flag = true;
      REP(i,n){
        REP(j,n){
          if(i+a-1 >=n){
            flag = false;
            break;
          }
          if(j+b-1>=n)continue;
          if(i==0 && j==0){
            now = dsum[i+a-1][j+b-1];
          }else if(i==0){
            now = dsum[i+a-1][j+b-1] - dsum[i+a-1][j-1];
          }else if(j==0){
            now = dsum[i+a-1][j+b-1] - dsum[i-1][j+b-1];
          }else{
            now = dsum[i+a-1][j+b-1] - dsum[i-1][j+b-1] - dsum[i+a-1][j-1] + dsum[i-1][j-1];
          }
          temp = max(temp,now);
        }
      }
    }
    max_area[s] = max(max_area[s-1],temp);
  }
  
  int q;
  cin>>q;
  int p;
  REP(i,q){
    cin>>p;
    cout<<max_area[p]<<endl;
  }
  return 0;
}

Submission Info

Submission Time
Task D - おいしいたこ焼きの焼き方
User ready_player074
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2260 Byte
Status AC
Exec Time 43 ms
Memory 256 KB

Judge Result

Set Name Subtask1 Subtask2
Score / Max Score 50 / 50 50 / 50
Status
AC × 18
AC × 20
Set Name Test Cases
Subtask1 sub0.txt, sub1.txt, sub2.txt, sub_rand_max0.txt, sub_rand_max1.txt, sub_rand_max2.txt, sub_rand_max3.txt, sub_rand_min0.txt, s1.txt, s2.txt, sub0.txt, sub1.txt, sub2.txt, sub_rand_max0.txt, sub_rand_max1.txt, sub_rand_max2.txt, sub_rand_max3.txt, sub_rand_min0.txt
Subtask2 rand0.txt, rand1.txt, rand2.txt, rand3.txt, rand4.txt, rand_max0.txt, rand_max1.txt, rand_max2.txt, rand_max3.txt, rand_max4.txt, s1.txt, s2.txt, sub0.txt, sub1.txt, sub2.txt, sub_rand_max0.txt, sub_rand_max1.txt, sub_rand_max2.txt, sub_rand_max3.txt, sub_rand_min0.txt
Case Name Status Exec Time Memory
rand0.txt AC 22 ms 256 KB
rand1.txt AC 14 ms 256 KB
rand2.txt AC 23 ms 256 KB
rand3.txt AC 5 ms 256 KB
rand4.txt AC 1 ms 256 KB
rand_max0.txt AC 42 ms 256 KB
rand_max1.txt AC 43 ms 256 KB
rand_max2.txt AC 43 ms 256 KB
rand_max3.txt AC 43 ms 256 KB
rand_max4.txt AC 43 ms 256 KB
s1.txt AC 1 ms 256 KB
s2.txt AC 1 ms 256 KB
sub0.txt AC 1 ms 256 KB
sub1.txt AC 1 ms 256 KB
sub2.txt AC 1 ms 256 KB
sub_rand_max0.txt AC 1 ms 256 KB
sub_rand_max1.txt AC 1 ms 256 KB
sub_rand_max2.txt AC 1 ms 256 KB
sub_rand_max3.txt AC 1 ms 256 KB
sub_rand_min0.txt AC 1 ms 256 KB