#include <bits/stdc++.h> using namespace std; int main() { //char buffer[500]; ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); long long int n, s; int m; //fgets(buffer, sizeof(buffer), stdin); //sscanf(buffer, " %lld %d %lld ", &n, &m, &s); cin>>n>>m>>s; vector<pair<long long int, long long int>> ranges(m); bool is_s_taken = false; for (int i = 0; i < m; i++) { //fgets(buffer, sizeof(buffer), stdin); //sscanf(buffer, " %lld %lld ", &ranges[i].first, &ranges[i].second); cin>>ranges[i].first>>ranges[i].second; /*if(ranges[i].first <= s && ranges[i].second >= s) { is_s_taken = true; }*/ } //if(!is_s_taken) { ranges.emplace_back(s,s); } sort(ranges.begin(), ranges.end()); long long int optimum=ranges[0].first - 1; // sprawdzac potem czy nie 0 long long int optimum_distance = abs(s - optimum); long long int distance_from_school, curr_house; for (int i = 1; i < ranges.size(); i++) { while(i < ranges.size() && ranges[i-1].second + 1 == ranges[i].first) { ++i; } if(i >= ranges.size()) { break; } if(abs(s - (ranges[i].first - 1)) < abs(s - (ranges[i-1].second + 1))) { curr_house = ranges[i].first - 1; } else { curr_house = ranges[i-1].second + 1; } distance_from_school = abs(s - curr_house); if(optimum_distance > distance_from_school || optimum <= 0) { optimum = curr_house; optimum_distance = distance_from_school; } } long long int last = ranges.back().second + 1; if(optimum <= 0 || (abs(last - s) < optimum_distance && last <= n)) { optimum = last; } //printf("%lld\n", optimum); cout << optimum << endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include <bits/stdc++.h> using namespace std; int main() { //char buffer[500]; ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); long long int n, s; int m; //fgets(buffer, sizeof(buffer), stdin); //sscanf(buffer, " %lld %d %lld ", &n, &m, &s); cin>>n>>m>>s; vector<pair<long long int, long long int>> ranges(m); bool is_s_taken = false; for (int i = 0; i < m; i++) { //fgets(buffer, sizeof(buffer), stdin); //sscanf(buffer, " %lld %lld ", &ranges[i].first, &ranges[i].second); cin>>ranges[i].first>>ranges[i].second; /*if(ranges[i].first <= s && ranges[i].second >= s) { is_s_taken = true; }*/ } //if(!is_s_taken) { ranges.emplace_back(s,s); } sort(ranges.begin(), ranges.end()); long long int optimum=ranges[0].first - 1; // sprawdzac potem czy nie 0 long long int optimum_distance = abs(s - optimum); long long int distance_from_school, curr_house; for (int i = 1; i < ranges.size(); i++) { while(i < ranges.size() && ranges[i-1].second + 1 == ranges[i].first) { ++i; } if(i >= ranges.size()) { break; } if(abs(s - (ranges[i].first - 1)) < abs(s - (ranges[i-1].second + 1))) { curr_house = ranges[i].first - 1; } else { curr_house = ranges[i-1].second + 1; } distance_from_school = abs(s - curr_house); if(optimum_distance > distance_from_school || optimum <= 0) { optimum = curr_house; optimum_distance = distance_from_school; } } long long int last = ranges.back().second + 1; if(optimum <= 0 || (abs(last - s) < optimum_distance && last <= n)) { optimum = last; } //printf("%lld\n", optimum); cout << optimum << endl; return 0; } |