Submission #72941

# Submission time Handle Problem Language Result Execution time Memory
72941 2018-08-27T09:20:56 Z SmsS Wiring (IOI17_wiring) C++17
13 / 100
1000 ms 6560 KB
#include<bits/stdc++.h>
using namespace std;
#define for2(a,b,c) for(int a=b;a<c;a++)
#define ll long long
#include "wiring.h"

ll sub2(vector<int> r,vector<int> b){
	ll res = 0;
	int L = 0;
	int R = b.size()-1;
	while(L != r.size() && R != -1){
		res += b[R]-r[L];
		L++;
		R--;
	}
	while(R != -1){
		res += b[R]-r[L-1];
		R--;
	}
	while(L != r.size()){
		res += b[R+1]-r[L];
		L++;
	}
	return res;
}

#define PII pair<int,int>
#define F first
#define S second
#define pb push_back
#define all(x) (x).begin(),(x).end()
const int maxn = 200100;
ll dp[maxn];
ll sub3(vector<int> v1,vector<int> v2){
	vector<int> v[2];
	vector<PII> V;
	for(auto x : v1) {
		v[0].pb(x);
		V.pb({x,0});
	}
	for(auto x : v2){
		v[1].pb(x);
		V.pb({x,1});
	}
	sort(all(V));
	int n = V.size();
	for2(i,0,n){
		int x = V[i].F;
		bool t = V[i].S;

		dp[i] = 1e18;
		
		ll tmp = 1e18;
		int ind =  lower_bound(all(v[!t]),x)-v[!t].begin();
		if(ind != v[!t].size()) tmp = min(tmp,(ll)v[!t][ind]-x);
		ind --;
		if(ind >= 0)            tmp = min(tmp,(ll)x-v[!t][ind]);
		if(i) tmp += dp[i-1];
		dp[i] = tmp;	
		

		tmp = 0;
		ll cnt = 0;
		for(int j = i; j >= 0; j--){
			if(j != i) tmp += cnt*(V[j+1].F-V[j].F);
///			if(i == 5) cout << cnt << ' ' << (V[i+1].F) << ' ' << (V[i].F) << endl;
			if(V[j].S != V[i].S) break;
			cnt++;
		}
//		if(i == 5) cout << tmp << endl;
		int k = 0;
		for(int j = max(0ll,i-2*cnt+1); j <= i-cnt; j++){
			if(V[j].S == V[i].S) break;
			if(j != i-2*cnt+1) tmp += k*(V[j+1].F-V[j].F);
			k++;
		}
//		if(i == 5) cout << tmp << endl;
	
		if(k != cnt){
///			cout << "   " << i << ' ';
			///cout << dp[i] << endl;	

			continue;
		}
		dp[i] = min(dp[i],dp[i-2*cnt]+tmp);

///		cout << i << ' ';
///		cout << dp[i] << endl;	
//		cout << tmp << endl;
	}
	return dp[V.size()-1];
}

long long min_total_length(std::vector<int> r, std::vector<int> b) {
	if(r.back() < b[0]) return sub2(r,b);
	return sub3(r,b);
}

Compilation message

wiring.cpp: In function 'long long int sub2(std::vector<int>, std::vector<int>)':
wiring.cpp:11:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while(L != r.size() && R != -1){
        ~~^~~~~~~~~~~
wiring.cpp:20:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while(L != r.size()){
        ~~^~~~~~~~~~~
wiring.cpp: In function 'long long int sub3(std::vector<int>, std::vector<int>)':
wiring.cpp:55:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(ind != v[!t].size()) tmp = min(tmp,(ll)v[!t][ind]-x);
      ~~~~^~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 248 KB 3rd lines differ - on the 1st token, expected: '25859', found: '41263'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 352 KB Output is correct
2 Correct 3 ms 432 KB Output is correct
3 Correct 34 ms 2360 KB Output is correct
4 Correct 35 ms 2360 KB Output is correct
5 Correct 36 ms 2360 KB Output is correct
6 Correct 42 ms 2888 KB Output is correct
7 Correct 44 ms 2888 KB Output is correct
8 Correct 47 ms 2904 KB Output is correct
9 Correct 43 ms 2904 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2904 KB Output is correct
2 Incorrect 2 ms 2904 KB 3rd lines differ - on the 1st token, expected: '17703', found: '17701'
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 2904 KB Output is correct
2 Execution timed out 1070 ms 6560 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 248 KB 3rd lines differ - on the 1st token, expected: '25859', found: '41263'
2 Halted 0 ms 0 KB -