#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; } |
English