zoukankan      html  css  js  c++  java
  • BZOJ3505 [Cqoi2014]数三角形

    我们发现如果直接枚举是不行的

    先把所有状况算出来,然后减掉三点共线的情况:

    (1)同行或同列

    (2)同一条对角线,只需要算gcd,就可以算出来这个斜率下的总数量

     1 /**************************************************************
     2     Problem: 3505
     3     User: rausen
     4     Language: C++
     5     Result: Accepted
     6     Time:336 ms
     7     Memory:804 kb
     8 ****************************************************************/
     9  
    10 #include <cstdio>
    11   
    12 using namespace std;
    13 typedef long long ll;
    14 int n, m;
    15 ll ans;
    16   
    17 int gcd(int a, int b){
    18     return !b ? a : gcd(b, a % b);
    19 }
    20   
    21 inline ll calc(int x){
    22     return (ll) x * (x - 1) * (x - 2) / 6;
    23 }
    24   
    25 int main(){
    26     scanf("%d%d", &n, &m);
    27     ++n, ++m;
    28     ans = (ll) calc(n * m) - m * calc(n) - n * calc(m);
    29     int i, j, tmp;
    30     for (i = 1; i < n; ++i)
    31         for (j = 1; j < m; ++j)
    32             if ((tmp = gcd(i, j) + 1) > 2)
    33                 ans -= (tmp - 2) * (n - i) * (m - j) * 2;
    34     printf("%lld\n", ans);
    35     return 0;
    36 }
    37 
    View Code
  • 相关阅读:
    【HAOI2014】走出金字塔
    【HAOI2008】圆上的整点
    LOJ #116 有源汇点有上下界的最大流
    ZOJ [P2314] 无源汇点有上下界模版
    最小费用最大流模版
    最大流模版 dinic
    最大流模版 EK
    HDU [P1533]
    HDU [2255] 奔小康赚大钱
    POJ [P2289] Jamie's Contact Groups
  • 原文地址:https://www.cnblogs.com/rausen/p/4345424.html
Copyright © 2011-2022 走看看