http://codeforces.com/problemset/problem/796/B
题意根据:找到距离目标最近的可购买的点(以房子的价格为判断的条件)
思路:从目标点向两边遍历。有两种情况:
左右各有一个满足条件的可获得房子。这时候比较绝对距离 计算总距离
倘若往左或右遍历的时候 一方没有出现满足的点,需要特殊处理。一开始判断条件设置了很多次,但是有没有其它 的思路,所以就一直修改判断的条件。
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
int main() {
int a[500];
int n,m,k,tmp,left,right,mile;
cin >> n >>m >>k;
mile = 0;
left = right =-1;
for(int i = 0 ; i<n; ++i) {
cin >>a[i];
}
for(int i =m ; i<n ; ++i) {
if(a[i]<= k && a[i]!=0) {
// cout << "a[i]="<<a[i]<<endl;
right = i+1;
//cout << "right="<<right<<endl;
break;
}
}
for(int i = m-1; i>=0; i--) {
if(a[i] <= k && a[i]!=0) {
left = i+1;
// cout <<"left=" <<left<<endl;
break;
}
}
if(left==-1) {
cout << abs(right-m)*10<<endl;
} else {
if(right ==-1) {
cout <<abs(left-m)*10<<endl;
} else {
if(abs(m-left) <=abs(right-m) ) {
cout << abs(left-m)*10;
} else {
if(abs(m-left) >=abs(right-m)) {
cout << abs(right-m)*10;
}
}
}
}
return 0;
}
一开始想调用库函数去寻找第一个出现 不超过金币金额的房价,第一是比赛时是真的不知道形式。
赛后再去查找发现 find函数进行查找某个字符或数字第一个出现的位置,但是应该也可以进行对特定范围的数查找,但是我没有找到。但是其实利用暴力的解法看起来也不显得吃力,在这里。