码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ3505 [Cqoi2014]数三角形

时间:2015-03-17 21:29:15      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:

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

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

(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

 

BZOJ3505 [Cqoi2014]数三角形

标签:

原文地址:http://www.cnblogs.com/rausen/p/4345424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!