比赛 |
20120416 |
评测结果 |
AAWWWWTTTT |
题目名称 |
牛类刺绣 |
最终得分 |
20 |
用户昵称 |
Citron酱 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-04-16 09:19:00 |
显示代码纯文本
#include <cstdio>
#include <cmath>
#define I_F "cowemb.in"
#define O_F "cowemb.out"
const int Maxn=50000;
struct line
{
long a,b,c;
}s[Maxn];
struct point
{
double x,y;
};
int n=0,d;
long ans;
inline double Dist(const line&);
void Input();
inline bool Pd(const line&, const line&);
inline point Cros(const line&, const line&);
inline double Dist(const point&);
void Search();
void Output();
int main()
{
Input();
Search();
Output();
}
inline double Dist(const line &x)
{
return (x.c/sqrt(double(x.a*x.a+x.b*x.b)));
}
void Input()
{
int m;
freopen(I_F,"r",stdin);
scanf("%d%d",&m,&d);
for (int i=0; i<m; i++)
{
scanf("%ld%ld%ld",&s[n].a,&s[n].b,&s[n].c);
if (Dist(s[n])<d)
++n;
}
++n;
}
inline bool Pd(const line &a, const line &b)
{
return (b.a*a.b!=a.a*b.b);
}
inline point Cros(const line &a, const line &b)
{
point t;
t.x=(a.c*b.b-b.c*a.b)/(b.a*a.b-a.a*b.b);
t.y=(a.a*b.c-b.a*a.c)/(b.a*a.b-a.a*b.b);
return t;
}
inline double Dist(const point &x)
{
return sqrt(x.x*x.x+x.y*x.y);
}
void Search()
{
for (int i=0; i<n; i++)
for (int j=i+1; j<n; j++)
if (Pd(s[i],s[j]) && (Dist(Cros(s[i],s[j]))<d))
ans++;
}
void Output()
{
freopen(O_F,"w",stdout);
printf("%ld\n",ans);
}