結果
| 問題 |
No.1341 真ん中を入れ替えて門松列
|
| コンテスト | |
| ユーザー |
nmnmnmnmnmnmnm
|
| 提出日時 | 2020-12-20 15:08:50 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 1,105 ms / 2,000 ms |
| コード長 | 2,019 bytes |
| コンパイル時間 | 1,124 ms |
| コンパイル使用メモリ | 101,848 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-09-21 11:54:52 |
| 合計ジャッジ時間 | 13,260 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 14 |
ソースコード
#include <algorithm>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iostream>
#include <map>
#include <memory>
#include <queue>
#include <deque>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#include <cassert>
#include <iostream>
#include <stdio.h>
#include <time.h>
using namespace std;
typedef long long ll;
#define sz size()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(c) (c).begin(), (c).end()
#define rep(i,a,b) for(ll i=(a);i<(b);++i)
#define per(i,a,b) for(ll i=b-1LL;i>=(a);--i)
#define clr(a, b) memset((a), (b) ,sizeof(a))
#define ctos(c) string(1,c)
#define MOD 1000000007
ll n,m;
vector<pair<ll,ll> > vac;
vector<ll> vb;
ll f(ll e){
ll index = 0;
ll ret = 0;
vector<ll> v;
priority_queue<pair<ll,ll> > pq;
rep(i,-1,e+1){
if(i<e){
while(index<n&&vac[index].fi<=vb[i+1]){
pq.push(mp(-vac[index].se,vac[index].fi));
index++;
}
}
else{
while(index<n){
pq.push(mp(-vac[index].se,vac[index].fi));
index++;
}
}
while(pq.sz>i+1){
pair<ll,ll> p = pq.top();pq.pop();
v.pb(-p.fi);
}
}
if(pq.sz<e+1)return -1;
sort(all(v));
ll flag = 1;
rep(i,0,v.sz){
ret += vb[e+1+i];
if(v[i]>=vb[e+1+i])flag=0;
}
if(flag==0)return -1;
while(!pq.empty()){
pair<ll,ll> p = pq.top();pq.pop();
ret += -p.fi;
}
return ret;
}
int main(){
cin>>n>>m;
rep(i,0,n){
ll a,b,c;
cin>>a>>b>>c;
if(a>c)swap(a,c);
vac.pb(mp(a,c));
vb.pb(b);
}
vb.pb(1000000100);
sort(all(vac));
sort(all(vb));
ll mx = -1;
rep(i,-1,n){
mx = max(mx,f(i));
}
if(mx!=-1){
cout << "YES" << endl;
if(mx>=m){
cout << "KADOMATSU!" << endl;
}
else{
cout << "NO" << endl;
}
}
else{
cout << "NO" << endl;
}
return 0;
}
nmnmnmnmnmnmnm