题意:给n个点,问是否能两条平行线覆盖所有的点
思路:因为要求全部覆盖,所以我们第一个点肯定是会入其中一条直线,其实只用判前三个点的所有情况即可
#include<stdio.h> #include<set> #include<algorithm> using namespace std; int a[1010],n; set<double>s; bool judge(double k) { s.clear(); for(int i=1; i<=n; ++i) s.insert(a[i]*1.0-k*i); return s.size()==2; } int main() { scanf("%d",&n); for(int i=1; i<=n; ++i) scanf("%d",&a[i]); if(judge((a[2]-a[1])/1.0)||judge((a[3]-a[2])/1.0)||judge((a[3]-a[1])/2.0)) printf("Yes\n"); else printf("No\n"); return 0; }
原文:https://www.cnblogs.com/Lis-/p/11312075.html