結果

問題 No.165 四角で囲え!
ユーザー knewknowlknewknowl
提出日時 2015-04-20 00:25:43
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 1,834 ms / 5,000 ms
コード長 1,357 bytes
コンパイル時間 892 ms
コンパイル使用メモリ 73,460 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-12-26 03:32:01
合計ジャッジ時間 25,181 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 861 ms
5,248 KB
testcase_01 AC 1 ms
5,248 KB
testcase_02 AC 1 ms
5,248 KB
testcase_03 AC 2 ms
5,248 KB
testcase_04 AC 2 ms
5,248 KB
testcase_05 AC 1,097 ms
5,248 KB
testcase_06 AC 233 ms
5,248 KB
testcase_07 AC 1 ms
5,248 KB
testcase_08 AC 2 ms
5,248 KB
testcase_09 AC 2 ms
5,248 KB
testcase_10 AC 1 ms
5,248 KB
testcase_11 AC 1,169 ms
5,248 KB
testcase_12 AC 1,751 ms
5,248 KB
testcase_13 AC 1,743 ms
5,248 KB
testcase_14 AC 1,706 ms
5,248 KB
testcase_15 AC 1,714 ms
5,248 KB
testcase_16 AC 1,725 ms
5,248 KB
testcase_17 AC 1,735 ms
5,248 KB
testcase_18 AC 1,834 ms
5,248 KB
testcase_19 AC 1,735 ms
5,248 KB
testcase_20 AC 1,709 ms
5,248 KB
testcase_21 AC 1,717 ms
5,248 KB
testcase_22 AC 1,758 ms
5,248 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
int x[500],y[500],p[500];
map<int,int> MP;
int n,b;
int num[500][500],P[500][500];

void init(int* ar){
  MP.clear();
  for(int i=0;i<n;++i){
    MP[ar[i]]=1;
  }
  int s=1;
  for(map<int,int>::iterator it=MP.begin();it!=MP.end();++it) (*it).second=s++;
  for(int i=0;i<n;++i) ar[i]=MP[ar[i]];
}

int Num(int x1,int y1,int x2,int y2,int ar[500][500]){
  if(x1<x2) swap(x1,x2);
  if(y1<y2) swap(y1,y2);
  return ar[x1][y1]-ar[x1][y2-1]-ar[x2-1][y1]+ar[x2-1][y2-1];
}

int main(){
  cin>>n>>b;
  for(int i=0;i<n;++i) cin>>x[i]>>y[i]>>p[i];
  init(x);
  init(y);
  //  for(int i=0;i<n;++i) cout << x[i] << " " << y[i] << " " << p[i] << endl;
  
  for(int i=0;i<n;++i) num[x[i]][y[i]]++,P[x[i]][y[i]]=p[i];
  for(int i=0;i<=n;++i){
    for(int j=1;j<=n;++j){
      num[i][j]+=num[i][j-1];
      P[i][j]+=P[i][j-1];
    }
  }
  for(int j=0;j<=n;++j){
    for(int i=1;i<=n;++i){
      num[i][j]+=num[i-1][j];
      P[i][j]+=P[i-1][j];
    }
  }

  int ans = 0;
  for(int y1=1;y1<=n;++y1){
    for(int y2=y1;y2<=n;++y2){
      for(int r=1;r<=n;++r){
	int u=1,v=r;
	for(int m=0;m<10;++m){
	  int l=(u+v)/2;
	  if(Num(l,y1,r,y2,P)<=b) v=l;
	  else u=l;
	}
	if(Num(v,y1,r,y2,P)<=b) ans = max(ans,Num(v,y1,r,y2,num));
      }
    }
  }
  cout << ans << endl;
  return 0;
}
0