| Task: | Compensation |
| Sender: | Game of Nolife |
| Submission time: | 2016-11-12 15:07:48 +0200 |
| Language: | C++ |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.06 s | details |
| #2 | ACCEPTED | 0.07 s | details |
| #3 | ACCEPTED | 0.06 s | details |
| #4 | ACCEPTED | 0.05 s | details |
| #5 | ACCEPTED | 0.09 s | details |
| #6 | ACCEPTED | 0.10 s | details |
| #7 | ACCEPTED | 0.08 s | details |
| #8 | ACCEPTED | 0.10 s | details |
| #9 | ACCEPTED | 0.10 s | details |
| #10 | ACCEPTED | 0.05 s | details |
| #11 | ACCEPTED | 0.06 s | details |
| #12 | ACCEPTED | 0.06 s | details |
| #13 | ACCEPTED | 0.06 s | details |
| #14 | ACCEPTED | 0.06 s | details |
| #15 | ACCEPTED | 0.07 s | details |
| #16 | ACCEPTED | 0.05 s | details |
| #17 | ACCEPTED | 0.06 s | details |
Code
#include <bits/stdc++.h>
#define F first
#define S second
#define X real()
#define Y imag()
using namespace std;
typedef long long ll;
typedef long double ld;
const int inf=1e8;
int cb[101010];
int vv[101010][2];
vector<pair<int, int> > go[111];
vector<int> arr[111];
int n,m;
void solve(int ttt, vector<pair<int, pair<int, int> > > s){
for (int i=1;i<=n;i++){
go[i].clear();
arr[i].clear();
}
for (auto ss:s){
go[ss.F].push_back(ss.S);
}
for (int i=1;i<=n;i++){
sort(go[i].begin(), go[i].end());
arr[i].resize(go[i].size());
}
for (int i=(int)go[n-1].size()-1;i>=0;i--){
arr[n-1][i]=go[n-1][i].S;
if (i+1<(int)go[n-1].size()){
arr[n-1][i]=min(arr[n-1][i], arr[n-1][i+1]);
}
}
for (int i=n-2;i>=1;i--){
for (int j=(int)go[i].size()-1;j>=0;j--){
pair<int, int> asdf={go[i][j].S, 0};
int id=lower_bound(go[i+1].begin(), go[i+1].end(), asdf)-go[i+1].begin();
if (id>=(int)go[i+1].size()){
arr[i][j]=inf;
}
else{
arr[i][j]=arr[i+1][id];
}
if (j+1<(int)go[i].size()){
arr[i][j]=min(arr[i][j], arr[i][j+1]);
}
}
}
int i2=(int)go[1].size()-1;
int mv=inf;
for (int i=90000;i>=0;i--){
while (i2>=0&&go[1][i2].F>=i){
mv=min(mv, arr[1][i2]);
i2--;
}
vv[i][ttt]=mv;
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
vector<pair<int, pair<int, int> > > s1;
vector<pair<int, pair<int, int> > > s2;
for (int i=0;i<m;i++){
int x,s,t,l;
cin>>x>>s>>t>>l;
if (x==1) cb[s]=1;
s1.push_back({x, {s, t}});
s2.push_back({x, {s+l, t+l}});
}
solve(0, s1);
solve(1, s2);
for (int i=0;i<=90000;i++){
if (cb[i]&&vv[i][0]+1800<=vv[i][1]){
cout<<i<<endl;
return 0;
}
}
cout<<"impossible"<<endl;
}Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 5 35 1 51823 82363 59890 2 31739 66068 17641 3 30445 42417 77902 4 49150 49816 22049 ... |
| correct output |
|---|
| 3895 |
| user output |
|---|
| 3895 |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 99 10000 1 5192 5289 0 2 960 983 400 3 1087 1162 225 4 2324 2423 144 ... |
| correct output |
|---|
| 5112 |
| user output |
|---|
| 5112 |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 87 10000 1 6166 6263 0 2 965 1061 256 3 5919 5962 361 4 2910 2933 196 ... |
| correct output |
|---|
| 6295 |
| user output |
|---|
| 6295 |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 94 10000 1 5267 5267 0 2 5905 5944 484 3 2288 2344 144 4 3497 3548 100 ... |
| correct output |
|---|
| 5160 |
| user output |
|---|
| 5160 |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 97 100000 1 5149 5174 0 2 1956 1990 5476 3 3370 3415 6400 4 3032 3068 5329 ... |
| correct output |
|---|
| 103 |
| user output |
|---|
| 103 |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 87 100000 1 4897 4919 0 2 4428 4482 0 3 7124 7139 0 4 6095 6127 0 ... |
| correct output |
|---|
| 801 |
| user output |
|---|
| 801 |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 96 100000 1 5415 5475 0 2 5982 5992 0 3 8410 8422 0 4 7595 7911 0 ... |
| correct output |
|---|
| 805 |
| user output |
|---|
| 805 |
Test 8
Verdict: ACCEPTED
| input |
|---|
| 90 100000 1 37420 38418 1 2 68502 69942 1 1 346 531 1 4 28145 29746 1 ... |
| correct output |
|---|
| impossible |
| user output |
|---|
| impossible |
Test 9
Verdict: ACCEPTED
| input |
|---|
| 90 100000 1 83900 85801 1 2 72188 73458 1 1 57291 58966 1 4 69743 70728 1 ... |
| correct output |
|---|
| impossible |
| user output |
|---|
| impossible |
Test 10
Verdict: ACCEPTED
| input |
|---|
| 5 35 1 27333 80262 47834 2 40841 56209 66265 3 37689 85312 74945 4 12123 67360 36187 ... |
| correct output |
|---|
| 10007 |
| user output |
|---|
| 10007 |
Test 11
Verdict: ACCEPTED
| input |
|---|
| 5 35 1 86335 86357 66676 2 4816 76697 68528 3 56889 83733 65118 4 22002 36999 16872 ... |
| correct output |
|---|
| 3992 |
| user output |
|---|
| 3992 |
Test 12
Verdict: ACCEPTED
| input |
|---|
| 99 31747 1 2566 2662 0 2 2938 2958 1024 3 4031 4053 2809 4 1631 1695 5476 ... |
| correct output |
|---|
| 4339 |
| user output |
|---|
| 4339 |
Test 13
Verdict: ACCEPTED
| input |
|---|
| 94 7549 1 2191 2258 0 2 1326 1348 6084 3 1358 1367 6241 4 2085 2095 4624 ... |
| correct output |
|---|
| 282 |
| user output |
|---|
| 282 |
Test 14
Verdict: ACCEPTED
| input |
|---|
| 82 35612 1 2868 2919 0 2 3794 3894 6400 3 1142 1199 361 4 2495 2519 289 ... |
| correct output |
|---|
| impossible |
| user output |
|---|
| impossible |
Test 15
Verdict: ACCEPTED
| input |
|---|
| 88 22965 1 4820 4918 0 2 1243 1332 625 3 895 994 2025 4 1894 1934 2601 ... |
| correct output |
|---|
| 128 |
| user output |
|---|
| 128 |
Test 16
Verdict: ACCEPTED
| input |
|---|
| 88 10000 1 750 761 0 2 5784 5825 144 3 5981 6044 289 4 724 743 400 ... |
| correct output |
|---|
| 743 |
| user output |
|---|
| 743 |
Test 17
Verdict: ACCEPTED
| input |
|---|
| 89 10000 1 4508 4554 0 2 2385 2470 361 3 314 320 225 4 2006 2034 625 ... |
| correct output |
|---|
| 6211 |
| user output |
|---|
| 6211 |
