zoukankan      html  css  js  c++  java
  • Power Transmission (Hard Edition)

    大概:给n个点 每两点都有连线 求线段相交的次数

    相交斜率一定不同 (斜率相同的条数)*(其他的) 就是于其他相交的次数 总数就/2

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int gcd(int a, int b) {
     5     return !b ? a : gcd(b, a % b);
     6 }
     7 
     8 int n, x[1005], y[1005];
     9 
    10 struct line {
    11     int a, b, c;
    12     line(int x = 0, int y = 0, int z = 0) {
    13         int g = gcd(gcd(x, y), z);
    14         a = x / g, b = y / g, c = z / g;
    15     }
    16 };
    17 vector<line> vl;
    18 bool operator<(const line &a, const line &b) {
    19     if (a.a != b.a)
    20         return a.a < b.a;
    21     if (a.b != b.b)
    22         return a.b < b.b;
    23     if (a.c != b.c)
    24         return a.c < b.c;
    25     return false;
    26 }
    27 bool operator==(const line &a, const line &b) {
    28     return a.a == b.a && a.b == b.b && a.c == b.c;
    29 }
    30 map<line, int> sz;
    31 
    32 int main() {
    33     scanf("%d", &n);
    34     for (int i = 1; i <= n; ++i)
    35         scanf("%d%d", x + i, y + i);
    36     for (int i = 1; i < n; ++i)
    37         for (int j = i + 1; j <= n; ++j)
    38             vl.emplace_back(y[i] - y[j], x[j] - x[i], x[i] * y[j] - x[j] * y[i]);
    39     sort(vl.begin(), vl.end());
    40     vl.erase(unique(vl.begin(), vl.end()), vl.end());
    41     int tot = vl.size();
    42     for (const line &p : vl)
    43         ++sz[line(p.a, p.b, 0)];
    44     long long ans = 0;
    45     for (const auto &p : sz)
    46         ans += 1LL * p.second * (tot - p.second);
    47     printf("%lld
    ", ans / 2);
    48     return 0;
    49 }
  • 相关阅读:
    20180530
    vue路由配置出错,导致页面跳转会有闪屏问题
    20180528
    vuecli+ivew项目搭建
    centos6安装mysql
    华为云服务ESC
    centos6安装nginx
    国产操作系统aarch64编译filebeat
    Python常见问题
    Git
  • 原文地址:https://www.cnblogs.com/Kingpenguin/p/10852824.html
Copyright © 2011-2022 走看看