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

Silver

没啥好说的:直接求出所有斜率然后排序(特别注意斜率为正无穷,或者说是斜率不存在的情况)

 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.
时间: 2024-08-24 10:30:29

1610: [Usaco2008 Feb]Line连线游戏的相关文章

[BZOJ1610][Usaco2008 Feb]Line连线游戏

1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 2282  Solved: 1022 [Submit][Status][Discuss] Description Farmer John最近发明了一个游戏,来考验自命不凡的贝茜.游戏开始的时 候,FJ会给贝茜一块画着N (2 <= N <= 200)个不重合的点的木板,其中第i个点 的横.纵坐标分别为X_i和Y_i (-1,000 <=

[Usaco2008 Feb]Line连线游戏[暴力][水题]

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). 贝茜可以选两个点画一条过它们的直线,当且仅当平面上不存在与画出直线 平行的直线.游戏结束时贝茜的得分,就是她画出的直线的总条数.为了在游戏 中胜出,

[Usaco2008 Feb]Line连线游戏

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

【计算几何】【斜率】bzoj1610 [Usaco2008 Feb]Line连线游戏

枚举直线,计算斜率,排序,统计答案. #include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define EPS 0.00000001 #define INF 99999999999999999999.0 #define N 201 typedef double db; int n,m,sta,ans; db xs[N],ys[N],line[N*N]; int main()

[BZOJ1610] [Usaco2008 Feb] Line连线游戏 (set)

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). 贝茜可以选两个点画一条过它们的直线,当且仅当平面上不存在与画出直线 平行的直线.游戏结束时贝茜的得分,就是她画出的直线的总条数. 为了在游戏 中胜出

BZOJ_1610_[Usaco2008_Feb]_Line连线游戏_(计算几何基础+暴力)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1610 给出n个点,问两两确定的直线中,斜率不同的共有多少条. 分析 暴力枚举直线,算出来斜率放在k数组里面(斜率不存在记为INF),然后去个重统计个数就行了. 其实特水... 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn=200+5; 5 const double eps=1e-8,INF=0x7f

[USACO08FEB]连线游戏Game of Lines

题目背景 Farmer John最近发明了一个游戏,来考验自命不凡的贝茜. 题目描述 Farmer John has challenged Bessie to the following game: FJ has a board with dots marked at N (2 ≤ N ≤ 200) distinct lattice points. Dot i has the integer coordinates Xi and Yi (-1,000 ≤ Xi ≤ 1,000; -1,000 ≤

BZOJ 1592: [Usaco2008 Feb]Making the Grade 路面修整( dp )

最优的做法最后路面的高度一定是原来某一路面的高度. dp(x, t) = min{ dp(x - 1, k) } + | H[x] - h(t) | ( 1 <= k <= t ) 表示前 i 个路面单调不递减, 第 x 个路面修整为原来的第 t 高的高度. 时间复杂度O( n³ ). 令g(x, t) = min{ dp(x, k) } (1 <= k <= t), 则转移O(1), g() 只需在dp过程中O(1)递推即可, 总时间复杂度为O( n² ) 然后单调不递增也跑一遍

1611: [Usaco2008 Feb]Meteor Shower流星雨

1611: [Usaco2008 Feb]Meteor Shower流星雨 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1010  Solved: 446[Submit][Status][Discuss] Description 去年偶们湖南遭受N年不遇到冰冻灾害,现在芙蓉哥哥则听说另一个骇人听闻的消息: 一场流星雨即将袭击整个霸中,由于流星体积过大,它们无法在撞击到地面前燃烧殆尽, 届时将会对它撞到的一切东西造成毁灭性的打击.很自然地,芙蓉哥哥开