[noip模拟题]合理种植
2016-07-15 20:20
211 查看
【问题描述】
大COS在氯铯石料场干了半年,受尽了劳苦,终于决定辞职。他来到表弟小cos的寒树中学,找到方克顺校长,希望寻个活干。
于是他如愿以偿接到了一个任务……
美丽寒树中学种有许多寒树。方克顺希望校园无论从什么角度看都是满眼寒树,因此他不希望有三棵甚至更多寒树种在一条直线上。现在他把校园里n棵寒树的坐标都给了大COS,让他数出存在多少多树共线情况。(若一条直线上有三棵或以上的树,则算出现一个多树共线情况。)
【输入】
输入文件名为plant.in。
第1行一个正整数n,表示寒树棵数。
接下来n行,每行两个非负整数x、y,表示一颗寒树的坐标。没有两颗寒树在同一位置。
【输出】
输出文件名为plant.out。
输出一个整数,表示存在多少多树共线情况。
【输入输出样例】
【数据范围】
对于30%的数据,有n≤10;
对于50%的数据,有n≤100;
对于100%的数据,有n≤1,000,0≤x,y≤10,000。
这道题纯属数学题,先O(n2)跑一道,把任意两点之间的斜率求出来,再用O(n3)判断三条个点是否共线,至于判重嘛。。就自己想一下了
(论常数的重要性)
Code
大COS在氯铯石料场干了半年,受尽了劳苦,终于决定辞职。他来到表弟小cos的寒树中学,找到方克顺校长,希望寻个活干。
于是他如愿以偿接到了一个任务……
美丽寒树中学种有许多寒树。方克顺希望校园无论从什么角度看都是满眼寒树,因此他不希望有三棵甚至更多寒树种在一条直线上。现在他把校园里n棵寒树的坐标都给了大COS,让他数出存在多少多树共线情况。(若一条直线上有三棵或以上的树,则算出现一个多树共线情况。)
【输入】
输入文件名为plant.in。
第1行一个正整数n,表示寒树棵数。
接下来n行,每行两个非负整数x、y,表示一颗寒树的坐标。没有两颗寒树在同一位置。
【输出】
输出文件名为plant.out。
输出一个整数,表示存在多少多树共线情况。
【输入输出样例】
plant.in | plant.out |
6 0 0 1 1 2 2 3 3 0 1 1 0 | 1 |
对于30%的数据,有n≤10;
对于50%的数据,有n≤100;
对于100%的数据,有n≤1,000,0≤x,y≤10,000。
这道题纯属数学题,先O(n2)跑一道,把任意两点之间的斜率求出来,再用O(n3)判断三条个点是否共线,至于判重嘛。。就自己想一下了
(论常数的重要性)
Code
#include<iostream> #include<fstream> #include<cstring> using namespace std; ifstream fin("plant.in"); ofstream fout("plant.out"); typedef bool boolean; typedef class Point{ public: int x; int y; }Point; istream& operator >>(istream& in,Point& p){ in>>p.x>>p.y; } Point *ps; int n; int _x,_y; long long ks[1001][1001]; boolean vis[1001][1001]; long long result = 0; int main(){ fin>>n; memset(vis, false, sizeof(vis)); ps = new Point[(const int)(n + 1)]; for(int i = 1;i <= n;i++) fin>>ps[i]; for(int i = 1;i <= n;i++){ for(int j = i + 1;j <= n;j++){ _x = ps[j].x - ps[i].x; _y = ps[j].y - ps[i].y; if(_x == 0) ks[i][j] = 1; else ks[i][j] = (_y * 100000000LL)/_x; } } for(int i = 1;i < n - 1;i++){ for(int j = i + 1; j < n;j++){ for(int k = j + 1; k <= n;k++){ if(ks[i][j] == ks[j][k] && ks[i][j] == ks[i][k]){ if(vis[i][j]||vis[j][k]||vis[i][k]){ vis[i][j] = vis[j][k] = vis[i][k] = true; }else{ vis[i][j] = vis[j][k] = vis[i][k] = true; result++; } } } } } fout<<result; return 0; }
相关文章推荐
- Codeforces Round #362 (Div. 2) B 模拟
- 指针数组 数组指针 指针函数 函数指针
- UVA 10916 Factstone Benchmark
- 如何在 Linux 上永久挂载一个 Windows 共享
- Android studio libpng error: Not a PNG file
- 运算符和表达式
- jzoj 1568. 【普及模拟】石子游戏 解题报告
- csu 1110 RMQ with Shifts 线段树
- HTTP
- Java JVM 内存泄漏--全解析和处理办法 [ 转载 ]
- centos6.5 下安装 sqlplus
- 关于 const,以下正确的是
- Hibernate 简单使用(三)一对一关联映射
- 【HIHOCODER】The Cats' Feeding Spots
- 如何让多个输入框对齐
- 【AD】取消普通域用户帐号加域权限&授权特定普通域用户加域权限
- android service 学习
- UVA-10815 Andy's First Dictionary
- Android小知识点积累
- unity中的碰撞检测