救救兔子(二分)
鏈接:https://ac.nowcoder.com/acm/contest/372/B
來源:牛客網(wǎng)
?
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 262144K,其他語言524288K
64bit IO Format: %lld
題目描述
某天,一只可愛的小兔砸在路上蹦蹦跳跳地走著,怪人PM6出現(xiàn)了,于是小兔子被盯上了。
PM6:“免子。哦不,小兔子。你長得真好…不對,真可愛。我這里有一道很容易很容易的題目,答對了我就請你吃蘿卜,答錯了你就請我吃兔肉,好不好呀~~?”
小兔砸:“蘿卜!?好呀好呀好呀。”于是笨笨的兔紙入套了。
PM6:“我這里有一個由 N 個數(shù)組成的序列,給你 M 個詢問,每個詢問會給你一個數(shù) X ,對于每個詢問,你要回答出序列中與這個值最接近的元素。”
聽完題后,兔子嚇成一坨免子了,面臨著變成紅燒兔頭的危險,求求你救救兔子!
輸入描述:
第一行包含一個整數(shù)N,為序列長度。 第二行包含N個整數(shù),為序列各元素。 第三行包含一個整數(shù)M,為PM6的詢問個數(shù)。 接下來M行,每行一個整數(shù)X,為要詢問最接近元素的給定值。 對于40%的數(shù)據(jù):1<=N<=10000,1<=M<=1000 對于另外10%的數(shù)據(jù):M=1 對于100%的數(shù)據(jù):1 <=N<= 100000,1<=M<=10000,0<=序列中的每個數(shù),X<=1e9輸出描述:
M行,每行有一個整數(shù),為最接近相應(yīng)給定值的元素值,保持輸入順序。若有多個值滿足條件,輸出最小的一個。示例1
輸入
復(fù)制
5 2 4 5 5 7 3 2 5 6輸出
復(fù)制
2 5 5代碼:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<set> #include<map> #include<vector> #include<cmath>const int maxn=1e5+5; typedef long long ll; using namespace std; int a[maxn]; int b[maxn]; bool cmp(int x,int y) {return x>y; } int main() {int n;scanf("%d",&n);for(int t=0;t<n;t++){scanf("%d",&a[t]);b[t]=a[t];}sort(a,a+n);sort(b,b+n,cmp);int m;scanf("%d",&m);int x;int index1,index2;for(int t=0;t<m;t++){scanf("%d",&x);index1=lower_bound(a,a+n,x)-a;index2=lower_bound(b,b+n,x,greater<int>())-b; // cout<<a[index1]<<" "<<b[index2]<<endl;if(abs(a[index1]-x)>=abs(b[index2]-x)){printf("%d\n",b[index2]);}else{printf("%d\n",a[index1]);}}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/Staceyacm/p/10781738.html
總結(jié)
- 上一篇: pie的绕过方式
- 下一篇: IDE设置jdk和maven