zoukankan      html  css  js  c++  java
  • CF849B Tell Your World

    Solution

    我们可以想到构造三条基准线: (k_{1,2},k_{2,3},k_{1,3}) ,分别以 (a_1,a_2)(a_2,a_3)(a_1,a_3) 为线上的点,然后去判断剩下的点是否是在另一条与某一条基准线平行的线上。

    代码

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    const int N=1010;
    double a[N];
    int n;
    
    inline int read(){
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
        while(isdigit(ch)){x=x*10+(ch^48);ch=getchar();}
        return x*f;
    }
    
    inline int solve(double k){
        int flag=0,point=-1;
        for(int i=2;i<=n;i++){
            if(a[i]-a[1]==k*(i-1)) continue;//可能这条平行线有1
            flag=1;
            if(point<0) point=i;//没有1就记录点
            else if(a[i]-a[point]!=k*(i-point)){
                flag=0;//还不行就真不行了
                break;
            }
        }
        if(flag==1) return 1;
        else return 0;
    }
    
    int main(){
        n=read();
        for(int i=1;i<=n;i++)
            a[i]=read();
        double k1=a[2]-a[1],k2=a[3]-a[2],k3=(a[3]-a[1])/2;
        if(solve(k1)||solve(k2)||solve(k3)) puts("Yes");
        else puts("No");
        return 0;
    }
    
  • 相关阅读:
    享元模式(Flyweight)
    策略模式(strategy)
    访问者模式(Visitor)
    适配器模式(Adapter)
    外观模式(Facade)
    代理模式(Proxy)
    ORACLE 表空间扩展方法
    Oracle XML Publisher
    DB.Package procedure Report
    case ... end 语句
  • 原文地址:https://www.cnblogs.com/jasony/p/13738036.html
Copyright © 2011-2022 走看看