程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> BZOJ 3505 CQOI 2014 數三角形 數學

BZOJ 3505 CQOI 2014 數三角形 數學

編輯:C++入門知識

BZOJ 3505 CQOI 2014 數三角形 數學


題目大意:給一張m*n的網格,問這裡面以網格為頂點的三角形有多少個。


思路:數學題。首先算出所有互不相同的三點對,然後減掉其中三個點在一個直線上的點對就行了。注意答案開long long。


CODE:


#include 
#include 
#include 
#include 
using namespace std;

int m,n;

int Gcd(int x,int y);

int main()
{
	cin >> m >> n;
	long long ans = (m + 1) * (n + 1);
	ans = ans * (ans - 1) * (ans - 2) / 6;
	for(int i = 0;i <= m; ++i)
		for(int j = 0;j <= n; ++j) {
			if(i == 0 && j == 0)	continue;
			int x = Gcd(i,j);
			ans -= (x - 1) * (m - i + 1) * (n - j + 1) * (i * j ? 2:1);
		}
	cout << ans << endl;
	return 0;
}

int Gcd(int x,int y)
{
	return y ? Gcd(y,x%y):x;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved