Codeforces Round #431 (Div. 2) Tell Your World

来源:互联网 发布:战舰世界雷鸣数据 编辑:程序博客网 时间:2024/06/01 09:01

不算很水的一个题

找到和1,2不一条线的一个点。

如果不能找到,就是他们一条线了,错误,

然后3个不共线的点,如果有两条直线平行一共有三种可能。


#include<bits\stdc++.h>using namespace std;typedef long long ll;int a[1005];int main(){  int n;  while(~scanf("%d",&n))  {for(int i=1;i<=n;i++)scanf("%d",&a[i]);  double t1,t2,t3;  t1=t2=t3=0;  int cnt1,cnt11,cnt2,cnt22,cnt3,cnt33;  cnt1=cnt11=cnt2=cnt22=cnt33=cnt3=1;  int i;  for(i=3;i<=n;i++)  {      if(a[i]-a[i-1]==a[2]-a[1])continue;      break;  }  cnt1=i-1;  if(i>n){printf("No\n");break;} t1=a[2]-a[1]; double b1,b2,b3,b11,b22,b33; t2=1.0*(a[i]-a[2])/(i-2); t3=1.0*(a[i]-a[1])/(i-1); b1=a[i]-i*t1; b2=a[1]-t2; b3=a[2]-2*t3; b11=a[1]-t1; b22=a[2]-2*t2; b33=a[i]-i*t3; int flag=0; for(i+=1;i<=n;i++) {     if(1.0*i*t1+1.0*b1==a[i])cnt1++;    else if((1.0*i*t1+1.0*b11)==a[i])cnt11++; }  if(cnt1+cnt11==n)flag=1;  //cout<<cnt1<<" "<<cnt11<<endl;  for(i=3;i<=n;i++)  {      if(1.0*i*t2+1.0*b2==a[i])cnt2++;     else if(1.0*i*t2+1.0*b22==a[i])cnt22++;  }   // cout<<cnt2<<" "<<cnt22<<endl;  if(cnt2+cnt22==n)flag=1;   for(i=3;i<=n;i++)  {      if(1.0*i*t3+1.0*b3==a[i])cnt3++;     else if(1.0*i*t3+1.0*b33==a[i])cnt33++;  }    //  cout<<cnt3<<" "<<cnt33<<endl;  if(cnt3+cnt33==n)flag=1;  if(flag==1)printf("Yes\n");    else printf("No\n");}    return 0;}


阅读全文
0 0
原创粉丝点击