CSES - BAPC 2015 - Results
Submission details
Task:Hotels
Sender:
Submission time:2017-10-17 20:51:07 +0300
Language:C++
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.05 sdetails
#2ACCEPTED0.07 sdetails
#3--details
#4--details
#5--details
#6ACCEPTED0.04 sdetails
#7ACCEPTED0.07 sdetails
#8ACCEPTED0.09 sdetails
#9ACCEPTED0.20 sdetails
#10--details
#11ACCEPTED0.07 sdetails
#12ACCEPTED0.35 sdetails
#13ACCEPTED0.03 sdetails

Code

#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
typedef long long ll;
typedef long double ld;

const int inf=1e9;

int r[111];
int m[111];

int has(map<int, int> d, int t){
	for (auto it=d.begin();it!=d.end();it++){
		int lp=(*it).F+(t-(*it).S-1);
		
		auto nit=it;
		nit++;
		
		int up=(*nit).F-(t-(*nit).S-1);
		
		lp=max(lp, (*it).F-1);
		up=min(up, (*nit).F+1);
		if (lp+1<up){
			return lp+1;
		}
	}
	return inf;
}

void solve(){
	int f,e;
	cin>>f>>e;
	map<int, vector<int> > es;
	map<int, int> d;
	for (int i=0;i<e;i++){
		cin>>r[i]>>m[i];
		for (int j=0;;j++){
			int x=j*m[i]+r[i];
			if (x>=f) break;
			es[x].push_back(i);
		}
	}
	priority_queue<pair<int, int> > dij;
	dij.push({0, 0});
	while (!dij.empty()){
		auto t=dij.top();
		dij.pop();
		int x=t.S;
		int dd=-t.F;
		assert(x==0||es.count(x));
		if (d.count(x)) continue;
		d[x]=dd;
		for (int ev:es[x]){
			if (x+m[ev]<f){
				dij.push({-dd, x+m[ev]});
			}
			if (x-m[ev]>=0){
				dij.push({-dd, x-m[ev]});
			}
		}
		auto it=es.upper_bound(x);
		if (it!=es.end()){
			int nx=(*it).F;
			assert(nx>x);
			dij.push({-(dd+(nx-x)), nx});
		}
		if (it!=es.begin()) {
			it--;
			if (it!=es.begin()){
				it--;
				int nx=(*it).F;
				assert(nx<x);
				dij.push({-(dd+(x-nx)), nx});
			}
		}
	}
	if (d.count(f-1)==0){
		d[f-1]=f-1;
	}
	int mi=0;
	int ma=f;
	pair<int, int> ans={0, 0};
	while (mi<=ma){
		int mid=(mi+ma)/2;
		int h=has(d, mid);
		if (h<inf){
			ans={mid, h};
			mi=mid+1;
		}
		else{
			ma=mid-1;
		}
	}
	cout<<ans.F<<" "<<ans.S<<'\n';
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int tcs;
	cin>>tcs;
	for (int tc=0;tc<tcs;tc++){
		solve();
	}
}

Test details

Test 1

Verdict: ACCEPTED

input
11
25 1
0 20
25 1
0 19
...

correct output
10 10
9 9
499999999 499999999
999999998 999999998
999999999 999999999
...

user output
10 10
9 9
499999999 499999999
999999998 999999998
999999999 999999999
...

Test 2

Verdict: ACCEPTED

input
65
11 1
3 5
11 5
2 5
...

correct output
5 5
5 10
5 9
5 9
5 10
...

user output
5 5
5 10
5 9
5 9
5 10
...

Test 3

Verdict:

input
55
8 12
0 8
1 8
2 8
...

correct output
1 1
1 1
2 2
1 3
3 3
...

user output
(empty)

Test 4

Verdict:

input
135
7 5
1 2
1 6
4 7
...

correct output
2 2
2 2
1 1
2 2
2 2
...

user output
(empty)

Test 5

Verdict:

input
135
7 5
0 2
1 6
4 7
...

correct output
1 1
1 1
2 2
1 1
1 1
...

user output
(empty)

Test 6

Verdict: ACCEPTED

input
95
6 0
4 0
6 2
3 4
...

correct output
5 5
3 3
5 5
7 7
1 1
...

user output
5 5
3 3
5 5
7 7
1 1
...

Test 7

Verdict: ACCEPTED

input
95
7 1
0 2
5 1
1 2
...

correct output
1 1
2 2
1 1
2 2
1 1
...

user output
1 1
2 2
1 1
2 2
1 1
...

Test 8

Verdict: ACCEPTED

input
95
7 3
0 2
1 7
2 6
...

correct output
1 1
1 1
1 1
1 1
1 1
...

user output
1 1
1 1
1 1
1 1
1 1
...

Test 9

Verdict: ACCEPTED

input
95
7 2
0 2
1 2
6 2
...

correct output
1 1
1 1
1 1
1 1
1 1
...

user output
1 1
1 1
1 1
1 1
1 1
...

Test 10

Verdict:

input
20
1000000000 100
594150 1000129
656679 999660
155808 1000433
...

correct output
44179 765964436
76578 186966148
47657 794974629
85198 224959980
127364 764952716
...

user output
(empty)

Test 11

Verdict: ACCEPTED

input
55
8 5
6 8
2 8
7 8
...

correct output
7 7
4 4
7 7
4 4
9 9
...

user output
7 7
4 4
7 7
4 4
9 9
...

Test 12

Verdict: ACCEPTED

input
100
10000000 1
502894 966242
20000000 2
1669915 1712967
...

correct output
1303821 9999999
2870329 19999999
3838029 29999999
3455687 39999999
2433171 5877033
...

user output
1303821 9999999
2870329 19999999
3838029 29999999
3455687 39999999
2433171 5877033
...

Test 13

Verdict: ACCEPTED

input
1
21 3
0 3
0 2
1 2

correct output
0 0

user output
0 0