【BZOJ】1610: [Usaco2008 Feb]Line连线游戏(几何)
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
Input
Output
Sample Input
-1 1
-2 0
0 0
1 1
Sample Output
HINT
4
输出说明:
贝茜能画出以下4种斜率的直线:-1,0,1/3以及1。
Source
Silver
【BZOJ】1610: [Usaco2008 Feb]Line连线游戏(几何)相关推荐
- [BZOJ] 1610: [Usaco2008 Feb]Line连线游戏
1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 2264 Solved: 1017 [Sub ...
- bzoj 1610: [Usaco2008 Feb]Line连线游戏
1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 2235 Solved: 997 [Subm ...
- [BZOJ] 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1646 Solv ...
- bzoj 1611: [Usaco2008 Feb]Meteor Shower流星雨(DP)
1611: [Usaco2008 Feb]Meteor Shower流星雨 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1631 Solved: 6 ...
- bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(DP)
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1616 Solv ...
- BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS LDS (nlogn)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1609 题意: 给你一个只由数字"1,2,3"组成的序列a[i],共n个 ...
- 连线游戏Game of Lines
以后,如果不是A+B问题,我尽量每题都写,聚沙成塔 1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec Memory Limit: 64 MB Subm ...
- Flow Free solver[连线游戏求解器]
Fast automated solver for Flow Free puzzles written in C. 用C语言编写的连线游戏的快速自动求解器. GIF of the final pro ...
- Unity 使用LineRenderer做画线游戏
前段时间公司要求做一款画线游戏,经历了许多坑之后,最终确定使用LineRenderer来做,然后又是一系列的坑,好在最后还是做出来了,给大家分享下代码: using System.Collection ...
最新文章
- Android OkHttp(1)
- img should be PIL Image. Got <class ‘numpy.ndarray‘>
- Oracle常用字段数据类型/to_char函数
- dojo readings
- jzoj3771-小Z的烦恼【高精度,数学】
- 对DataTable的一些解释
- fpga烧写bin文件_FPGA烧写程序
- Servlet3.0 多图片,文件上传
- DELL 2400卡原装标志
- ModuleNotFoundError: No module named ‘Crypto‘ 踩坑
- Java多线程之JUC包:CountDownLatch源码学习笔记
- nested exception is java.io.FileNotFoundException: class path resource [spring/spring-datasource-mog
- Golang 入门 : Go语言介绍
- adobe pdf for linux,Linux PDF阅读软件Adobe Reader 9.5.5发布( for linux)
- 基于手机通信录应用的前景+
- android wifi速度太慢,手机连上wifi之后速度比4G还慢?设置好DNS让你体验飞一般的感觉...
- java发送公众号/服务通知模板消息到指定用户(完整流程|亲测可用)
- 学习使用安卓scroller
- 2021-08-07 解决安装MacTeX后界面显示法语问题
- 此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置
热门文章
- Android Prelink
- 关于壳的构架的一些感悟
- python function if yield_Python中的yield关键字
- 使用驱动器f:中的光盘之前需要将其格式化_mac虚拟光驱Daemon Tools高级功能详解—光盘刻录...
- Web应用扫描测试工具Vega
- Wireshark数据抓包教程之Wireshark捕获数据
- C#游戏开发快速入门教程Unity5.5教程
- Android 游戏开发入门
- 假赋值java_Java十四天零基础入门-Java赋值运算符
- iOS pop至指定页面