ARCマークランド-Nは、1からnまでの番号n個の床と高いビルです。建物内の各隣接する二つのフロア間、それらを結ぶ階段があります。
私たちの先生コリン「コナー」ノイマンジュニアのためのそれのランチタイム、および場所のための彼の計画は彼の食事を楽しむことができます。
コナーのオフィスは、床の建物のです。(床秒、もちろん含む)各フロアには、食事を提供するレストランがあります。しかし、進行中であること改装のために、レストランのkは現在閉鎖され、その結果、コナーは、そこに彼の昼食を楽しむことができません。
CooneRは、時間を節約するために、可能な限り迅速にレストランに到達したいと考えています。彼は最も近い現在開いているレストランに到達するために歩く必要がある階段の最小数はどのようなものです。
すぐに彼に答えると、あなたは彼の称賛を獲得しても、エレガントNeumanns'のように彼と一緒にランチを楽しむかもしれませんしてください!
入力
テストのテストケースの数-最初の行は1つの整数T(1≤t≤1000)を含みます。そして、t検定の例説明が続きます。
ARCマークランドのフロアのそれぞれ数 - テストケースの最初の行は三つの整数N、SおよびK(2≤n≤109、1≤s≤n、1≤k≤min(N-1,1000))を含んでいます-N、コナーが入っている床、及び閉鎖レストランの数。
現在閉鎖レストランのフロア番号 - テストケースの2行がkの異なる整数A1、A2、...、AK(1≤ai≤n)を含みます。
すべてのテストケースを超えるkの合計が1000を超えていないことが保証されています。
出力
各テストケースについては、単一の整数を印刷-コナーがオープンレストランの床に床sから歩くために階段の最小数が必要。
例えば
inputCopy
5
5 2 3
1 2 3
4 3 3
4 1 2
10 2 6
1 2 3 4 5 7
2 1 1
2
100 76 8
76 75 36 67 41 74 10 77
outputCopy
2
0
4
0
2
注
最初の例でテストケースは、開いているレストランの最寄り階は4階になります。
先生はどこにでも行く必要はありませんので、第二の例のテストケースでは、コナーの事務所で床はまだ、開いているレストランがあります。
第三の例のテストケースでは、最も近いオープンレストランでは6番目の階にあります。
問題の意味:N階建ての高層ビルがあり、各フロアにはレストランがあります。人の層。そして、レストランが閉鎖されるk個の層があります。私はあなたが近く、最寄りのレストランを開くどのくらい頼みますか??
分析:この質問は、1000K、暴力の最大範囲をすることができることに留意されたいです。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100;
map<int,int> v;
int a[N];
int t,n,s,k;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d %d %d",&n,&s,&k);
v.clear();
for(int i=1;i<=k;i++)
{
scanf("%d",&a[i]);
v[a[i]]=1;
}
if(v[s]==0)
{
puts("0");
continue;
}
int r=0x3f3f3f3f,l=0x3f3f3f3f;
for(int i=s;i<=n;i++)
{
if(v[i]==0)
{
r=i-s;
break;
}
}
for(int i=s;i>=1;i--)
{
if(v[i]==0)
{
l=s-i;
break;
}
}
printf("%d\n",min(l,r));
}
return 0;
}