cf 849B

来源:互联网 发布:java string类源码分析 编辑:程序博客网 时间:2024/06/18 18:40

题目大意:判断所有点能否在两条相互平行的直线上。做法:枚举K,计算前三个点两两之间的斜率,真实值定在三者中的一个,然后一个一个判断。(枚举k,暴力排查)

//codeforces 849B
#include <stdio.h>
#include <algorithm>
#include <string>
#include <string.h>
using namespace std;
const int maxn=1005;
int y[maxn];
int n; 
bool check(double k)
{
int flag=0,spot=-1;
for(int i=2;i<=n;i++)
{
if((y[i]-y[1])==k*(i-1)) continue; //说明满足假设斜率,继续检索 
flag=1;//说明有了两条直线
if(spot==-1) spot=i; //第二条直线的第一个点 
else if((y[i]-y[spot])!=k*(i-spot))
{
flag=0; 
break;
}
}
if(flag) return true;
else return false;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
memset(y,0,sizeof(y));
for(int i=1;i<=n;i++)
scanf("%d",&y[i]);
double k1=(y[2]-y[1])*1.0;
double k2=(y[3]-y[1])*0.5;
double k3=(y[3]-y[2])*1.0;
if(check(k1)||check(k2)||check(k3))
printf("Yes\n");
else printf("No\n");
}
return 0;
}