A. ConneR and the A.R.C. Markland-N(思维)
题目链接:codeforces 1293A
题意:
T组样例,每组样例给出一个 n, s, k ,表示 n 层楼,当前ConneR在 s 层,有 k 层餐馆关闭了,第二行输入 k 个数,表示没有开门的餐馆在哪层。问ConneR最少走多少层可以吃到午饭。
举例:
2 2组 5 2 3 总共5层,当前处于第二层,有3层没有开门 1 2 3 1,2,3楼餐馆没有开门 输出2,从第二层走到第四层, 4 - 2 = 2 4 3 3 总共4层,当前处于第三次层,有3层没有开门 4 1 2 1,2,4楼餐馆没有开门 输出0,直接到开门的第三层吃饭就可以
解题思路:
如果当前处在的楼层开门,那么直接在本层就可以,输出0
否则排序,如果a[i+1] - a[i] > 1,表示中间存在开门的餐馆
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin >> t;
while(t--){
int n, s, k, a[1005];
cin >> n >> s >> k;
for(int i = 1; i <= k; i++){
cin >> a[i];
}
a[0] = 0;
a[k+1] = n+1;
sort(a, a+1+k);
int ans = 50000;
bool flag = false;
for(int i = 0; i <= k; i++){
if(a[i] == s){
flag = true;
}
if(a[i+1] - a[i] != 1){
ans = min(ans, abs(a[i]-s+1));
ans = min(ans, abs(a[i+1]-s-1));
}
}
if(!flag){
ans = 0;
}
cout << ans << endl;
}
return 0;
}