记录编号 |
38264 |
评测结果 |
AAAAAAATTT |
题目名称 |
[USACO Open09] 牛类刺绣 |
最终得分 |
70 |
用户昵称 |
王者自由 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
3.611 s |
提交时间 |
2012-04-16 18:27:44 |
内存使用 |
1.44 MiB |
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define lint long long
const int N = 50000 + 10;
struct line {
lint a, b, c;
} l[N];
lint n, d, m, x, y, z, s, g;
bool online(lint a, lint b, lint c) {
return c*c <= d*d * (a*a + b*b); // |ax+by+c| / sqrt(a^2+b^2) <= d
}
bool cross(lint u, lint v) {
if(u >= v) return false;
if(l[u].a == l[v].a || l[u].b == l[v].b) return false;
x = l[v].c*l[u].b - l[u].c*l[v].b; // x = (c2b1-c1b2)/z
y = l[v].c*l[u].a - l[u].c*l[v].a; // y = -(c2a1-c1a2)/z
z = l[u].a*l[v].b - l[v].a*l[u].b; // z = a1b2-a2b1
return x*x + y*y <= d*d * z*z; // x^2+y^2<=d^2
}
int main() {
freopen("cowemb.in", "r", stdin);
freopen("cowemb.out", "w", stdout);
scanf("%lld %lld", &n, &d);
for(int i=0; i<n; i++) {
scanf("%lld %lld %lld", &x, &y, &z);
if(online(x, y, z))
l[m].a = x, l[m].b = y, l[m].c = z, m++;
}
for(int i=0; i<m; i++)
for(int j=i; j<m; j++)
if(cross(i, j))
s++;
printf("%lld\n", s);
return 0;
}