zoukankan      html  css  js  c++  java
  • Luogu P3166数三角形

    题目
    其实就是组合数啊
    先把所有情况求出来,再减掉三点共线的情况,剩下的就是能构成三角形的情况
    三点共线分3种:1.在同一行 2.在同一列 3.在斜线上
    所以一边扫一边减就行了
    注意给的是格子的行列数,格点的行列数要+1
    其实读入m,n之后直接++,后面就不用注意这个+1的问题了,要不每次都+1就很麻烦,我写的时候真是傻了
    贴一个写的很丑的代码:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #define maxn 2010
    #define ll long long
    using namespace std;
    template<typename T>
    inline void read(T &x){
    	x=0; bool flag=0; char c=getchar();
    	for(;!isdigit(c);c=getchar()) if(c=='-') flag=1;
    	for(;isdigit(c);c=getchar()) x=x*10+(c^48);
    	if(flag) x=-x;
    }
    
    ll m,n,ans;
    
    ll mul(ll a){
    	ll res;
    	res=(a)*(a-1)*(a-2)/(1*2*3);
    	return res;
    }
    
    int gcd(int a,int b){
    	return (b==0)?a:gcd(b,a%b);
    }
    
    int main(){
    	read(m),read(n);
    //	m++;n++;
    	ans=mul((m+1)*(n+1));
    //	cout<<"*"<<ans<<endl;
    	if(m>=2) ans-=(n+1)*mul(m+1);
    	if(n>=2) ans-=(m+1)*mul(n+1);
    //	cout<<"**"<<ans<<endl;
    	for(int i=1;i<=m;i++)
    		for(int j=1;j<=n;j++)
    			ans-=2*(m-i+1)*(n-j+1)*(gcd(i,j)-1);
    	printf("%lld
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    Linux基础命令mv
    Linux基础命令cp
    闭包函数
    函数的嵌套
    函数对象
    global与nonlocal
    名称空间与作用域
    函数的参数(总结)
    函数的基本使用
    文件的操作之指针移动
  • 原文地址:https://www.cnblogs.com/DReamLion/p/14514682.html
Copyright © 2011-2022 走看看