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
  • 相关阅读:
    Manjaro i3wm替换默认程序配置
    我的Alacritty配置
    我的compton配置
    我的i3config配置
    我的Manjaro rofi配置
    我的Manjaro i3status配置说明
    我的Manjaro i3自用软件记录
    我的Manjaro i3wm安装记录
    数组介绍
    进制、位运算笔记
  • 原文地址:https://www.cnblogs.com/rausen/p/4345424.html
Copyright © 2011-2022 走看看