HDU 5072 Coprime 同色三角形問題

2022-09-23 10:06:12 字數 1339 閱讀 4762

好吧,我承認就算當時再給我五個小時我也做不出來。

首先解釋同色三角形問題:

給出n(n >= 3)個點,這些點中的一些被塗上了紅色,剩下的被塗上了黑色。然後將這些點兩兩相連,於是每三個點都會組成乙個三角形,

即總共有sum = c(3,n)個三角形。對於乙個三角形,如果三個點顏色一樣則稱其為同色三角形。

那麼乙個很直觀的思路就是容斥,sum - 非同色三角形個數ans。

ans = (sigma (xi*yi) ) / 2;(1 <= i <= n,xi,yi分別表示與第 i 個點相連的紅色點和黑色點的個數。)

狀態不好的時候,**寫的就像屎一樣。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#pragma comment(linker, "/stack:1024000000")

#define eps (1e-8)

#define ll long long

#define ull unsigned long long

#define inf 0x3f3f3f3f

using namespace std;

int divi[100010][130];

bool is[100010];

int num[100010];

int mem[100010];

int ch[1001];

int check(int x)

int main()}}

int max,mul,t;

int wf;

for(i = 1;i <= n; ++i)

if(mul != 1)

divi[i][++divi[i][0]] = mul*ch[j];}}

int t,tmp;

ll ans,sum;

int top;

scanf("%d",&t);

while(t--)

ans = 0;

memset(mem,-1,sizeof(mem));

ll anw = 0;

for(i = 1;i <= n; ++i)

ans += sum;

}if(ans)

anw += (n-ans)*(ans-1);

} ll tn = n;

printf("%i64d\n",tn*(tn-1)*(tn-2)/6 -anw/2);

}return 0;

}

hdu 5072 Coprime 約數,容斥原理

給出一些數,挑選其中3個,求兩兩互質和兩兩不互質的方案數。需要對唯一分解原理有一定的理解,兩個數不互質無非就是質因數分解後有相同的部分,比如a質因數分解為p1 p2 p3 p4.指數省略 與a不互質的數有p1的倍數,p2的倍數.根據容斥原理還需減去p1 p2的倍數,總結就是奇數個加,偶數個減。本題求...

容斥原理 HDU 5072

解題思路 如果三個數a,b,c不符合條件,那麼一定有一對是互質的,有一對是不互質的。不妨令a,b互質,b,c不互質。於是我們可以列舉b來統計答案。在除了b自己的所有數中,要麼與b互質,要麼與b不互質。假設n個數中有x個與b不互質的數,那麼b對答案的貢獻就是 x 1 n x 注意這裡的求出答案之後要除...

hdu5072 莫比烏斯

給出n個數,問其中有多少三元組 a,b,c 使得 a,b b,c a,c 1 or a,b 1 and a,c 1 and b,c 1 n 10 5,ai 10 5.首先可以把問題抽象為有n個點,兩兩連邊,有紅邊和藍邊,問三邊同色三角形有多少。然後考慮算反面,發現只要找從乙個點出發的兩種邊分別有幾條...