码迷,mamicode.com
首页 > 其他好文 > 详细

poj 2318 TOYS 2012-01-11

时间:2016-03-02 21:54:40      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

http://poj.org/problem?id=2318

___________________________________________________

题目大意:一个箱子用木板分成几个区间,给一些玩具的坐标,求各个区间有几个玩具。

  对于每一个玩具,因为输入的区间是有序的,所以采用二分木板,判断一个玩具在哪个区间。

 

___________________________________________________

 1 Program Stone;
 2 var i,n,m,x1,x2,y1,y2,xi,yi:longint;
 3     ui,li:array[0..10000]of longint;
 4     ans:array[0..10000]of longint;
 5  procedure init;
 6  var i,j,k:longint;
 7   begin
 8      readln(n,m,x1,y1,x2,y2);
 9      ui[0]:=x1;li[0]:=x1;
10      ui[n+1]:=x2;li[n+1]:=x2;
11      if n=0 then halt;
12      for i:=1 to n do readln(ui[i],li[i]);
13   end;
14  Function cross(x1,y1,x2,y2,x3,y3,x4,y4:longint):longint;    //叉积
15   begin
16     cross:=(x2-x1)*(y4-y3)-(y2-y1)*(x4-x3);
17   end;
18  function ef(x,y:longint):longint;
19  var i,j,k,left,right,mid:longint;
20   begin
21      left:=0;right:=n+1;
22      while left+1<right do
23       begin
24          mid:=(left+right)div 2;
25          k:=cross(li[mid],y2,ui[mid],y1,li[mid],y2,x,y);
26          if k<0 then left:=mid;
27          if k>0 then right:=mid;
28       end;
29      ef:=left;
30   end;
31  Procedure print;
32  var i:longint;
33   begin
34     for i:=0 to n do
35      writeln(i,: ,ans[i]);
36     writeln;
37     fillchar(ans,sizeof(ans),0);
38   end;
39 Begin
40  assign(input,input.in);reset(input);
41    while true do
42     begin
43        init;
44        for i:=1 to m do
45         begin
46           readln(xi,yi);
47           inc(ans[ef(xi,yi)]);
48         end;
49        print;
50     end;
51 end.
52 
53  

 

poj 2318 TOYS 2012-01-11

标签:

原文地址:http://www.cnblogs.com/yesphet/p/5236420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!