VJ链接:https://cn.vjudge.net/problem/CodeForces-796A
题目大意:有一排房子,给定购买房子所需的价格(0表示该房子已经有人买了),找到距离指定房子距离最近且价格不超过男主的现有的money的房子,求出这个房子与女主房子之间的距离(任意两个房子之间距离为10)
思路:从女主家开始,分别向左侧和右侧找到第一个满足价格的房子,最后,从二者中选出距离最近的即可(可能有一侧没有满足条件的房子,要特判)
上代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
using namespace std;
int main()
{
int n,m,k;
while(scanf("%d %d %d",&n,&m,&k)!=EOF)
{
int a[520];
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int posl=-1,posr=-1;
for(int i=m+1;i<=n;i++)
if(a[i]!=0&&a[i]<=k)
{
posr=i;
break;
}
for(int i=m-1;i>=1;i--)
{
if(a[i]!=0&&a[i]<=k)
{
posl=i;
break;
}
}
if(posl==-1)
{
printf("%d\n",abs(posr-m)*10);
continue;
}
if(posr==-1)
{
printf("%d\n",abs(posl-m)*10);
continue;
}
if(abs(m-posl)<abs(posr-m))
printf("%d\n",abs(m-posl)*10);
else if(m-posl>posr)
printf("%d\n",abs(posr-m)*10);
else
printf("%d\n",abs(min(a[posr],a[posl]))*10);
}
return 0;
}
代码写得可能有点捞,大佬勿喷