日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

一本通1655数三角形

發布時間:2025/7/14 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一本通1655数三角形 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1655:數三角形

時間限制: 1000 ms ??? ??? 內存限制: 524288 KB

【題目描述】

給定一個?n×m?的網格,請計算三點都在格點上的三角形共有多少個。下圖為?4×4?的網格上的一個三角形。

注意:三角形的三點不能共線。

【輸入】

輸入一行,包含兩個空格分隔的正整數?m?和?n。

【輸出】

輸出一個正整數,為所求三角形數量。

【輸入樣例】

2 2

【輸出樣例】

76

【提示】

數據范圍與提示:

對于所有數據,1m,n1000

?

sol:肯定是算不能構成三角形的方案數比較容易。

總方案數就是C(n*m,3)

不能構成的有兩種情況

1)三個點都在同一條與水平面平行或垂直的線上 C(n,3)*m+C(m,3)*n

2)對于一條任意長度的斜線,設其兩端坐標為(1,1) (a,b),那么斜線上格點的個數就是gcd(a-1,b-1)+1,在整個矩形中這樣的斜線會有(n-a+1)*(m-b+1)條,但是直接在這條斜線上任取三個點會有重復,所以欽定兩個端點必須取,中間任取一個點

注意有斜線有兩個方向,這樣的要減兩倍

#include <bits/stdc++.h> using namespace std; typedef long long ll; inline ll read() {ll s=0;bool f=0;char ch=' ';while(!isdigit(ch)){f|=(ch=='-'); ch=getchar();}while(isdigit(ch)){s=(s<<3)+(s<<1)+(ch^48); ch=getchar();}return (f)?(-s):(s); } #define R(x) x=read() inline void write(ll x) {if(x<0){putchar('-'); x=-x;}if(x<10){putchar(x+'0'); return;}write(x/10);putchar((x%10)+'0');return; } #define W(x) write(x),putchar(' ') #define Wl(x) write(x),putchar('\n') ll n,m; inline ll gcd(ll x,ll y) {return (!y)?(x):(gcd(y,x%y)); } int main() {ll i,j,ans=0,Sum=0;n=read()+1; m=read()+1;ans=(n*m)*(n*m-1)*(n*m-2)/6;ans-=m*n*(n-1)*(n-2)/6;ans-=n*m*(m-1)*(m-2)/6;for(i=2;i<=n;i++){for(j=2;j<=m;j++){ll tmp=gcd(i-1,j-1)+1;if(tmp>2) Sum+=(tmp-2)*(n-i+1)*(m-j+1);}}Wl(ans-(Sum<<1));return 0; } /* input 2 2 output 76input 6 9 output 52758 */ View Code

?

轉載于:https://www.cnblogs.com/gaojunonly1/p/10543963.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的一本通1655数三角形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。