제출 #831731

#제출 시각아이디문제언어결과실행 시간메모리
831731serifefedartarPalembang Bridges (APIO15_bridge)C++17
0 / 100
1 ms340 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define fast ios::sync_with_stdio(0);cin.tie(0);
typedef long long ll;
#define f first
#define s second
#define MOD 1000000007
#define LOGN 18
#define MAXN 200005

vector<ll> prefleftV, prefrightV;
vector<ll> leftV, rightV;
ll calc(int mid) {
	int L = mid+1;
}

ll get(ll mid) {
	ll from_left = upper_bound(rightV.begin(), rightV.end(), mid) -  rightV.begin();
	ll from_right = upper_bound(leftV.begin(), leftV.end(), mid) - leftV.begin();
	ll sum_left = prefrightV[from_left];
	ll sum_right = prefleftV.back() - prefleftV[from_right];
	ll res = mid * from_left - sum_left + sum_right - mid * (prefleftV.size() - from_right - 1);
	return res;
}

int main() {
	fast
	ll K, N;
	cin >> K >> N;

	ll sum = 0;
	for (int i = 0; i < N; i++) {
		char ch1, ch2;
		ll pos1, pos2;
		cin >> ch1 >> pos1 >> ch2 >> pos2;	

		if (ch1 == ch2)
			sum += abs(pos2 - pos1);
		else {
			sum += abs(pos1 - pos2) + 1;
			leftV.push_back(min(pos1, pos2));
			rightV.push_back(max(pos1, pos2));
		}
	}
	sort(leftV.begin(), leftV.end());
	sort(rightV.begin(), rightV.end());
	prefleftV = vector<ll>(leftV.size()+1, 0);
	prefrightV = vector<ll>(rightV.size()+1, 0);
	for (int i = 0; i < leftV.size(); i++)
		prefleftV[i+1] = prefleftV[i] + leftV[i];
	for (int i = 0; i < rightV.size(); i++)
		prefrightV[i+1] = prefrightV[i] + rightV[i];

	if (K == 1) {
		int L = 0;
		int R = 1000000001;
		while (R-L > 1) {
			int mid = L + (R-L)/2;
			if (get(mid) < get(mid+1))
				R = mid;
			else
				L = mid;
		}
		cout << 2*get((L+R)/2) + sum << "\n";
	} else {
		int L = 0;
		int R = 1000000001;
		while (L <= R) {
			int m1 = L + (R-L)/3;
			int m2 = R - (R-L)/3;
			if (calc(m1) < calc(m2))
				L = m1;
			else
				R = m2;
		}
		cout << calc(L) << "\n";
	}
}

컴파일 시 표준 에러 (stderr) 메시지

bridge.cpp: In function 'll calc(int)':
bridge.cpp:15:6: warning: unused variable 'L' [-Wunused-variable]
   15 |  int L = mid+1;
      |      ^
bridge.cpp:16:1: warning: no return statement in function returning non-void [-Wreturn-type]
   16 | }
      | ^
bridge.cpp: In function 'int main()':
bridge.cpp:50:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |  for (int i = 0; i < leftV.size(); i++)
      |                  ~~^~~~~~~~~~~~~~
bridge.cpp:52:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |  for (int i = 0; i < rightV.size(); i++)
      |                  ~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...