比赛 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);
}