이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
//author: Ahmet Alp Orakci
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
#define int i64
#define ONLINE_JUDGE
void solve() {
	int n, h;
	cin >> n >> h;
	pair <int, int> arr[n];
	for(auto &[a, b] : arr)
		cin >> a >> b;
	vector <pair <double, double>> anss;
	for(int i = 2; i < n -2; i += 2) {
		pair <double, double> ans = {-1E6, 1E6};
		for(int j = 1; j < n; j += 2) {
			if(arr[j].second >= arr[i].second) {
				if(arr[j].first <= arr[i].first) {
					double calc = arr[i].first - double(arr[i].first - arr[j].first) * double(h - arr[i].second) / double(arr[j].second - arr[i].second);
					ans.first = max(ans.first, calc);
				} else {
					double calc = arr[i].first + double(arr[j].first - arr[i].first) * double(h - arr[i].second) / double(arr[j].second - arr[i].second);
					ans.second = min(ans.second, calc);
				}
			}
		}
		anss.push_back(ans);
	}
	sort(anss.begin(), anss.end());
	int cev = 0;
	for(int i = 0; i < int(anss.size()); i++) {
		pair <double, double> nw = anss[i];
		while(i < int(anss.size())) {
			nw.first = max(nw.first, anss[i].first);
			nw.second = min(nw.second, anss[i].second);
			//cerr << anss[i].first << " " << anss[i].second << "\n";
			if(nw.first > nw.second) {
				i--;
				break;
			}
			i++;
		}
		cev++;
	}
	cout << cev << "\n";
	
	return;
}
signed main() {
	#ifndef ONLINE_JUDGE
		freopen(".in", "r", stdin);
		freopen(".out", "w", stdout);
	#endif
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	int t = 1; //cin >> t;
	for(int i = 1; i <= t; i++) {
		solve();
	}
	return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |