1610: [Usaco2008 Feb]Line连线游戏
时间:2022-05-07
本文章向大家介绍1610: [Usaco2008 Feb]Line连线游戏,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1610: [Usaco2008 Feb]Line连线游戏
Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1396 Solved: 615 [Submit][Status]
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
没啥好说的:直接求出所有斜率然后排序(特别注意斜率为正无穷,或者说是斜率不存在的情况)
1 var
2 i,j,k,l,m,n:longint;
3 a:array[0..100000,1..2] of extended;
4 b:array[0..1000,1..2] of longint;
5 procedure swap(var x,y:extended);
6 var z:extended;
7 begin
8 z:=x;x:=y;y:=z;
9 end;
10
11 procedure sort(l,r,z:longint);
12 var
13 i,j:longint;
14 x:extended;
15 begin
16 i:=l;
17 j:=r;
18 x:=a[(l+r) div 2,z];
19 repeat
20 while a[i,z]<x do inc(i);
21 while x<a[j,z] do dec(j);
22 if i<=j then
23 begin
24 swap(a[i,z],a[j,z]);
25 swap(a[i,3-z],a[j,3-z]);
26 inc(i);dec(j);
27 end;
28 until i>j;
29 if i<r then sort(i,r,z);
30 if l<j then sort(l,j,z);
31 end;
32
33
34 begin
35 readln(n);
36 for i:=1 to n do
37 begin
38 readln(b[i,1],b[i,2]);
39 end;
40
41 m:=0;
42 for i:=1 to n do
43 for j:=i+1 to n do
44 begin
45 inc(m);
46 if b[i,1]=b[j,1] then
47 begin
48 a[m,2]:=1;
49 a[m,1]:=0;
50 end
51 else
52 begin
53 a[m,2]:=0;
54 a[m,1]:=(b[j,2]-b[i,2])/(b[j,1]-b[i,1]);
55 end;
56 end;
57
58 sort(1,m,2);
59 l:=m;
60 while a[l,2]=1 do dec(l);
61 sort(1,l,1);
62
63 if l<=1 then
64 begin
65 if l=m then writeln(l) else writeln(l+1);
66 halt;
67 end;
68 j:=1;
69 k:=1;
70 for i:=2 to l do
71 begin
72 if a[i,1]<>a[j,1] then
73 begin
74 inc(k);
75 j:=i;
76 end;
77 end;
78 if l=m then writeln(k) else writeln(k+1);
79 end.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 关于AIX挂载NFS写入效率低效的解决方法
- Linux查看进程的所有信息的方法示例
- 新版VPS主机管理面板WDCP安装及使用体验-国产简单易用型VPS面板
- linux中普通用户的定时任务详解
- 详解在Linux中清空或删除大文件内容的5种方法
- 教你一招实现Linux中的文本比对
- 怎么禁用 Ubuntu 服务器中终端欢迎消息中的广告
- Linux系统下部署项目的设置方法
- Linux中设置路由以及虚拟机联网图文详解
- 在Linux中如何一次重命名多个文件详解
- Vim自定义高亮分组以及一些实用技巧小结
- Linux redis-Sentinel配置详解
- 使用 Apache Web 服务器配置两个或多个站点的方法
- Linux下命令行cURL的10种常见用法示例
- Apache Web 服务器的安装配置方法