http://www.lydsy.com/JudgeOnline/problem.php?id=1610

两种做法,一种计算几何,一种解析几何,但是计算几何的复杂度远远搞出解析集合(虽然精度最高)

计算几何:枚举每条线(变成向量),然后判断是否有其它线和他平行(叉积为0,但是要注意,初始化ans为1,因为我们只是判不加平行的)

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << #x << " = " << x << endl
#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=205;
struct Vector { int x, y; } line[N*N];
int n, x[N], y[N], cnt, ans=1;int main() {read(n);for1(i, 1, n) { read(x[i]); read(y[i]); }for1(i, 1, n-1) for1(j, i+1, n) line[++cnt].x=x[i]-x[j], line[cnt].y=y[i]-y[j];for1(i, 1, cnt-1) {bool flag=1;for1(j, i+1, cnt) if(line[i].x*line[j].y==line[i].y*line[j].x) {flag=0; break;}if(flag) ++ans;}print(ans);return 0;
}

解析几何:枚举每条边斜率,排序后判重。(精度略有损失但速度快)

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << #x << " = " << x << endl
#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=205;
const double eps=1e-10, oo=1e15;
int n, x[N], y[N], cnt, ans;
double k[N*N];int main() {read(n);for1(i, 1, n) { read(x[i]); read(y[i]); }for1(i, 1, n-1) for1(j, i+1, n) if(x[i]!=x[j]) k[++cnt]=(double)(y[i]-y[j])/(x[i]-x[j]);else k[++cnt]=oo;sort(k+1, k+1+cnt);for1(i, 1, cnt) if(abs(k[i]-k[i-1])>eps) ++ans;print(ans);return 0;
}


Description

Farmer John最近发明了一个游戏,来考验自命不凡的贝茜。游戏开始的时 候,FJ会给贝茜一块画着N (2 <= N <= 200)个不重合的点的木板,其中第i个点 的横、纵坐标分别为X_i和Y_i (-1,000 <= X_i <=1,000; -1,000 <= Y_i <= 1,000)。 贝茜可以选两个点画一条过它们的直线,当且仅当平面上不存在与画出直线 平行的直线。游戏结束时贝茜的得分,就是她画出的直线的总条数。为了在游戏 中胜出,贝茜找到了你,希望你帮她计算一下最大可能得分。

Input

* 第1行: 输入1个正整数:N * 第2..N+1行: 第i+1行用2个用空格隔开的整数X_i、Y_i,描述了点i的坐标

Output

第1行: 输出1个整数,表示贝茜的最大得分,即她能画出的互不平行的直线数

Sample Input

4
-1 1
-2 0
0 0
1 1

Sample Output

* 第1行: 输出1个整数,表示贝茜的最大得分,即她能画出的互不平行的直线数

HINT

4

输出说明:

贝茜能画出以下4种斜率的直线:-1,0,1/3以及1。

Source

Silver

【BZOJ】1610: [Usaco2008 Feb]Line连线游戏(几何)相关推荐

  1. [BZOJ] 1610: [Usaco2008 Feb]Line连线游戏

    1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 2264  Solved: 1017 [Sub ...

  2. bzoj 1610: [Usaco2008 Feb]Line连线游戏

    1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 2235  Solved: 997 [Subm ...

  3. [BZOJ] 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐

    1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1646  Solv ...

  4. bzoj 1611: [Usaco2008 Feb]Meteor Shower流星雨(DP)

    1611: [Usaco2008 Feb]Meteor Shower流星雨 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1631  Solved: 6 ...

  5. bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(DP)

    1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1616  Solv ...

  6. BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS LDS (nlogn)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1609 题意: 给你一个只由数字"1,2,3"组成的序列a[i],共n个 ...

  7. 连线游戏Game of Lines

    以后,如果不是A+B问题,我尽量每题都写,聚沙成塔 1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec   Memory Limit: 64 MB Subm ...

  8. Flow Free solver[连线游戏求解器]

    Fast automated solver for Flow Free puzzles written in C.  用C语言编写的连线游戏的快速自动求解器. GIF of the final pro ...

  9. Unity 使用LineRenderer做画线游戏

    前段时间公司要求做一款画线游戏,经历了许多坑之后,最终确定使用LineRenderer来做,然后又是一系列的坑,好在最后还是做出来了,给大家分享下代码: using System.Collection ...

最新文章

  1. Android OkHttp(1)
  2. img should be PIL Image. Got <class ‘numpy.ndarray‘>
  3. Oracle常用字段数据类型/to_char函数
  4. dojo readings
  5. jzoj3771-小Z的烦恼【高精度,数学】
  6. 对DataTable的一些解释
  7. fpga烧写bin文件_FPGA烧写程序
  8. Servlet3.0 多图片,文件上传
  9. DELL 2400卡原装标志
  10. ModuleNotFoundError: No module named ‘Crypto‘ 踩坑
  11. Java多线程之JUC包:CountDownLatch源码学习笔记
  12. nested exception is java.io.FileNotFoundException: class path resource [spring/spring-datasource-mog
  13. Golang 入门 : Go语言介绍
  14. adobe pdf for linux,Linux PDF阅读软件Adobe Reader 9.5.5发布( for linux)
  15. 基于手机通信录应用的前景+
  16. android wifi速度太慢,手机连上wifi之后速度比4G还慢?设置好DNS让你体验飞一般的感觉...
  17. java发送公众号/服务通知模板消息到指定用户(完整流程|亲测可用)
  18. 学习使用安卓scroller
  19. 2021-08-07 解决安装MacTeX后界面显示法语问题
  20. 此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置

热门文章

  1. Android Prelink
  2. 关于壳的构架的一些感悟
  3. python function if yield_Python中的yield关键字
  4. 使用驱动器f:中的光盘之前需要将其格式化_mac虚拟光驱Daemon Tools高级功能详解—光盘刻录...
  5. Web应用扫描测试工具Vega
  6. Wireshark数据抓包教程之Wireshark捕获数据
  7. C#游戏开发快速入门教程Unity5.5教程
  8. Android 游戏开发入门
  9. 假赋值java_Java十四天零基础入门-Java赋值运算符
  10. iOS pop至指定页面