题意:
给你很多个(i,y[i])的点,让你判断能不能形成一对平行线,要用到所有的点。一个点也可以成线(最后一个样例)。
POINT:
选择最前的三个点,他们组成的3个斜率里肯定有一个是真正的k(如果YES)。再判断。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define LL long long
const int maxn =1111;
LL a[maxn];
int n;
bool check(double k)
{
int p=-1;
for(int i=2;i<=n;i++)
{
if((i-1)*k==a[i]-a[1])
{
continue;
}
if(p==-1)
{
p=i;
}
else
{
if((i-p)*k!=a[i]-a[p])
return 0;
}
}
return p!=-1;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
if(check(a[2]-a[1])||check((a[3]-a[1])/2.0)||check(a[3]-a[2]))
{
printf("YEs\n");
}
else
printf("NO\n");
}