【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 108422
  • 排名 - 229

最新评论

阅读排行榜

评论排行榜

小D正在玩CS,喜欢思考的他看到无数子弹从他眼前飞过时想到了一个奇怪的问题:这么多子弹在空中飞来飞去,难道它们不会相撞吗?当然这是可能的.小D把两颗子弹轨迹相交的地方叫做”火力汇点”,显然如果让敌人站在火力汇点上那么他将受到更严重的伤害.小D想知道平面上的所有火力汇点以便对敌人造成更重的打击,但是小D数学很差,所以他找到了你,请你帮他计算出平面上所有火力汇点的坐标.小D用直线来描述子弹的轨迹,这种子弹很特别,它发射后会迸裂成两颗并沿相反方向飞行(汗!!那不是打自己),小D数学很差(已知),只会用直线的一般式表示每条直线y=kx+b.
[数据规模]
对所有数据k,b<=maxint n<=100

input:
n
k1 b1
k2 b2
.
kn bn
第一行一个数n,表示直线数量
接下来n行,每行描述一条直线

output:
最多的火力交点数目
没有输出 No Fire Point.

【参考程序】:
const wc=1e-10;
var p:array[
0..5000,1..2] of real;
    line:array[
1..100,1..2] of integer;
    i,j,n:integer;
procedure put(x,y:real);
var i:integer;f:boolean;
begin
f:
=true;
for i:=1 to trunc(p[0,1]) do
    
if (abs(p[i,1]-x)<wc) and (abs(p[i,2]-y)<wc) then
      f:
=false;
if f then
begin
    p[
0,1]:=p[0,1]+1;
    p[trunc(p[
0,1]),1]:=x;
    p[trunc(p[
0,1]),2]:=y;
    end;
end;
procedure work(i,j:integer);
var x,y:real;
begin
   
if (line[i,1]-line[j,1])<>0 then
    begin
       x:
=(line[j,2]-line[i,2])/(line[i,1]-line[j,1]);
       y:
=line[i,1]*x+line[i,2];
       put(x,y);
    end;
end;
begin
while not eof do
begin
     readln(n);
     p[
0,1]:=0.0;
     
for i:=1 to n do
     readln(line[i,
1],line[i,2]);
     
for i:=1 to n do
        
for j:=i+1 to n do
          work(i,j);
     n:
=trunc(p[0,1]);
     
if n>0 then writeln(n)
     
else writeln('No Fire Point.');
end;
end.
posted on 2009-03-29 09:06 开拓者 阅读(350) 评论(0)  编辑 收藏 引用 所属分类: 数论&几何

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理