結果
| 問題 | No.165 四角で囲え! |
| コンテスト | |
| ユーザー |
codershifth
|
| 提出日時 | 2015-12-29 10:44:09 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,833 bytes |
| 記録 | |
| コンパイル時間 | 1,884 ms |
| コンパイル使用メモリ | 185,072 KB |
| 実行使用メモリ | 14,008 KB |
| 最終ジャッジ日時 | 2024-09-22 10:07:22 |
| 合計ジャッジ時間 | 20,258 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | TLE * 2 -- * 17 |
ソースコード
#include <bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
#define FOR(i,a,b) for(int (i)=(a);i<(b);i++)
#define REP(i,n) FOR(i,0,n)
#define RANGE(vec) (vec).begin(),(vec).end()
using namespace std;
pair<ll,ll> operator+(const pair<ll,ll> &a, const pair<ll,ll> &b)
{
return make_pair(a.first+b.first, a.second+b.second);
}
pair<ll,ll> operator-(const pair<ll,ll> &a, const pair<ll,ll> &b)
{
return make_pair(a.first-b.first, a.second-b.second);
}
class SurroundWithSquare {
public:
void dump(const pair<ll,ll> &a) {
cerr<<a.first<<","<<a.second<<endl;
}
void solve(void)
{
int N,B;
cin>>N>>B;
// 座標圧縮を使う
vector<ll> xs;
vector<ll> ys;
vector<tuple<ll,ll,ll>> ps;
REP(i,N)
{
ll x,y,p;
cin>>x>>y>>p;
ps.emplace_back(x,y,p);
xs.push_back(x);
ys.push_back(y);
}
sort(RANGE(xs));
sort(RANGE(ys));
map<ll,int> xmap;
map<ll,int> ymap;
REP(i,N)
{
xmap.emplace(xs[i],xmap.size());
ymap.emplace(ys[i],ymap.size());
}
const int maxX = xmap.size();
const int maxY = ymap.size();
// 0<=x,y<400
pair<ll,ll> field[maxY][maxX];
REP(y,maxY) REP(x,maxX) field[y][x] = make_pair(0,0);
REP(i,N)
{
ll x,y,p;
tie(x,y,p) = ps[i];
field[ymap[y]][xmap[x]] = make_pair(p,1);
}
pair<ll,ll> Sum[maxY][maxX];
REP(i,maxY) REP(j,maxX) Sum[i][j] = make_pair(0,0);
REP(y,maxY)
REP(x,maxX)
{
Sum[y][x] = field[y][x];
if (x > 0)
Sum[y][x] = Sum[y][x] + Sum[y][x-1];
}
REP(y,maxY)
REP(x,maxX)
{
if (y > 0)
Sum[y][x] = Sum[y][x] + Sum[y-1][x];
}
//REP(y,maxY) { REP(x,maxX) cerr<<Sum[y][x].second<<" ";cerr<<endl;}
ll maxN = 0;
REP(uy,maxY)
REP(ux,maxX)
REP(ly,uy+1)
REP(lx,ux+1)
{
pair<ll,ll> cnt(0,0);
pair<ll,ll> lb,rb,lt,rt;
lb = rb = lt = rt = make_pair(0,0);
rt = Sum[uy][ux];
if (ly > 0)
rb = Sum[ly-1][ux];
if (lx > 0)
lt = Sum[uy][lx-1];
if (lx > 0 && ly > 0)
lb = Sum[ly-1][lx-1];
cnt = rt - lt - rb + lb;
if (cnt.first <= B)
maxN = max(maxN, cnt.second);
}
cout<<maxN<<endl;
}
};
#if 1
int main(int argc, char *argv[])
{
ios::sync_with_stdio(false);
auto obj = new SurroundWithSquare();
obj->solve();
delete obj;
return 0;
}
#endif
codershifth