火力点
来源:互联网 发布:试客系统整站源码 编辑:程序博客网 时间:2024/04/30 06:01
Description
小D正在玩CS,喜欢思考的他看到无数子弹从他眼前飞过时想到了一个奇怪的问题:这么多子弹在空中飞来飞去,难道它们不会相撞吗?当然这是可能的.小D把两颗子弹轨迹相交的地方叫做”火力汇点”,显然如果让敌人站在火力汇点上那么他将受到更严重的伤害.小D想知道平面上的所有火力汇点以便对敌人造成更重的打击,但是小D数学很差,所以他找到了你,请你帮他计算出平面上所有火力汇点的坐标.小D用直线来描述子弹的轨迹,这种子弹很特别,它发射后会迸裂成两颗并沿相反方向飞行(汗!!那不是打自己),小D数学很差(已知),只会用直线的一般式表示每条直线y=kx+b.
Input
n
k1 b1
k2 b2
.
kn bn
第一行一个数n,表示直线数量
接下来n行,每行描述一条直线
Output
一个数,火力汇点的个数
若交点不存在请输出No Fire Point. (结尾有小点哦)
Sample Input
2
1 0
-1 2
Sample Output
1
Hint
[数据规模]
对所有数据k,b<=maxint n<=100 、
题解:
把每一条线段与其他线段的交点统计,去重就可以了。
代码:
var z:array[0..10000,1..2] of real; a,b:array[0..10000] of longint; i,k,n,j,t,ans:longint; x:real;begin readln(n); for i:=1 to n do readln(a[i],b[i]); for i:=1 to n-1 do for j:=i+1 to n do begin if a[i]-a[j]=0 then continue; x:=(b[j]-b[i])/(a[i]-a[j]); inc(t); z[t,1]:=x; z[t,2]:=a[i]*x+b[i]; end; for i:=1 to t-1 do for j:=i+1 to t do if (z[i,1]>z[j,1])or(z[i,1]=z[j,1])and(z[i,2]>z[j,2])then begin x:=z[i,1];z[i,1]:=z[j,1];z[j,1]:=x; x:=z[i,2];z[i,2]:=z[j,2];z[j,2]:=x; end; if t<>0 then ans:=1; for i:=2 to t do if (z[i,1]<>z[i-1,1])or(z[i,1]=z[i-1,1])and(z[i,2]<>z[i-1,2]) then inc(ans); if ans=0 then writeln('No Fire Point.') else writeln(ans);end.
0 0
- 火力点
- Unity一个智能火力点,根据攻击范围自动旋转攻击
- Unity一个智能火力点,根据攻击范围自动旋转攻击
- [工具]VS2013下载地址
- IQKeyboardManager简单实用
- HDU 1003 最大连续子段和
- shell中$@和$*的区别
- 5.Git代码<安装与配置>-2(自我整理) 2016/11/12
- 火力点
- 最优化方法综述
- [转]swift, unwind segue回传数据
- 又上锁妖塔
- 从零开始学习OpenWrt完美教程+学习笔记
- less封装累积
- linux查看文件创建修改时间,如何显示年份
- eclipse编译时的一些问题
- Unity3D插件之NGUI-Font Maker显示FreeType.dylib is missing问题解决