#include <iostream> #include <stdio.h> #include <stdlib.h> #include <vector> #include <algorithm> using namespace std; int main(void){ long long int n, m, s, l, r; long long int min_dist; long long int dist, picked_number; long long int before, after; vector<vector<long long int> > vec; scanf("%lld %lld %lld", &n, &m, &s); min_dist = n; vec.resize(m); for(long long int i = 0; i < m; i++){ vec[i].resize(2); scanf("%lld %lld", &l, &r); vec[i][0] = l; vec[i][1] = r; } //posortuj rosnąco sort(vec.begin(), vec.end(), [](const vector<long long int> &a, const vector<long long int> &b){ return a[0] < b[0]; }); //wybierz najbliższy budynek do szkoły if(vec[0][0]-1 >= 1) { picked_number = vec[0][0]-1; min_dist = abs(s - picked_number); } for(long long int i = 0; i < m; i++){ //sprawdź czy budynek przed przedziałem jest wolny if(i>0 && vec[i-1][1]+1 != vec[i][0]){ if(abs(s-(vec[i][0]-1)) < min_dist){ min_dist = abs(s-(vec[i][0]-1)); picked_number = vec[i][0]-1; } } //sprawdź czy budynek po przedziale jest wolny if(i < m-1 && vec[i][1]+1 != vec[i+1][0]){ if(abs(s-(vec[i][1]+1)) < min_dist){ min_dist = abs(s-(vec[i][1]+1)); picked_number = vec[i][1]+1; } } } //zobacz jeszcze czy da się wybrać budynek za ostatnim przedziałem //printf("%lld\n ", vec[m-1][1]+1); if(vec[m-1][1]+1<=n && abs(s-(vec[m-1][1]+1)) < min_dist){ min_dist = abs(s-(vec[m-1][1]+1)); picked_number = vec[m-1][1]+1; } printf("%lld\n", picked_number); 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 | #include <iostream> #include <stdio.h> #include <stdlib.h> #include <vector> #include <algorithm> using namespace std; int main(void){ long long int n, m, s, l, r; long long int min_dist; long long int dist, picked_number; long long int before, after; vector<vector<long long int> > vec; scanf("%lld %lld %lld", &n, &m, &s); min_dist = n; vec.resize(m); for(long long int i = 0; i < m; i++){ vec[i].resize(2); scanf("%lld %lld", &l, &r); vec[i][0] = l; vec[i][1] = r; } //posortuj rosnąco sort(vec.begin(), vec.end(), [](const vector<long long int> &a, const vector<long long int> &b){ return a[0] < b[0]; }); //wybierz najbliższy budynek do szkoły if(vec[0][0]-1 >= 1) { picked_number = vec[0][0]-1; min_dist = abs(s - picked_number); } for(long long int i = 0; i < m; i++){ //sprawdź czy budynek przed przedziałem jest wolny if(i>0 && vec[i-1][1]+1 != vec[i][0]){ if(abs(s-(vec[i][0]-1)) < min_dist){ min_dist = abs(s-(vec[i][0]-1)); picked_number = vec[i][0]-1; } } //sprawdź czy budynek po przedziale jest wolny if(i < m-1 && vec[i][1]+1 != vec[i+1][0]){ if(abs(s-(vec[i][1]+1)) < min_dist){ min_dist = abs(s-(vec[i][1]+1)); picked_number = vec[i][1]+1; } } } //zobacz jeszcze czy da się wybrać budynek za ostatnim przedziałem //printf("%lld\n ", vec[m-1][1]+1); if(vec[m-1][1]+1<=n && abs(s-(vec[m-1][1]+1)) < min_dist){ min_dist = abs(s-(vec[m-1][1]+1)); picked_number = vec[m-1][1]+1; } printf("%lld\n", picked_number); return 0; } |