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

    题目描述

    给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个。下图为4x4的网格上的一个三角形。注意三角形的三点不能共线。

    输入输出格式

    输入格式:

    输入一行,包含两个空格分隔的正整数m和n。

    输出格式:

    输出一个正整数,为所求三角形数量。

    输入输出样例

    输入样例#1: 
    2 2
    输出样例#1: 
    76

    说明

      1<=m,n<=1000。

    推完式子之后就是NOIP题。

    补集转化一下就好了

    #include<bits/stdc++.h>
    #define ll long long
    #define maxn 1005
    using namespace std;
    ll f[maxn][maxn],n,m;
    ll ans=0,sum[maxn],t=0;
    
    inline ll C(ll x){
        return x*(x-1)*(x-2)/6;
    }
    
    ll gcd(ll x,ll y){
        return y?gcd(y,x%y):x;
    }
    
    int main(){
        scanf("%lld%lld",&n,&m);
        ans=C((n+1)*(m+1))-(n+1)*C(m+1)-(m+1)*C(n+1);
        
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                sum[j]+=gcd(i,j);
                f[i][j]=f[i][j-1]+sum[j];
                t+=f[i][j]-i*j;
            }
        
        ans-=t<<1;
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    敏捷软件开发实践-Code Review Process(转)
    随笔1
    随笔
    随笔
    低级错误
    随笔
    随笔2
    随笔
    这以前写的代码
    蛋疼的vs
  • 原文地址:https://www.cnblogs.com/JYYHH/p/8532424.html
Copyright © 2011-2022 走看看