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
  • 相关阅读:
    加入创业公司有什么利弊
    Find Minimum in Rotated Sorted Array II
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Find Minimum in Rotated Sorted Array
    Remove Duplicates from Sorted Array
    Spiral Matrix
    Spiral Matrix II
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/rausen/p/4345424.html
Copyright © 2011-2022 走看看