对于统计有多少个不同的解决方案的问题的求法:
对于每一种转变,有多少种不同的解决方案,这些解决方案的平均值即为最终答案。
比如说从3种珠子里选5颗制作手链,求有多少种不同的手链。
对于手链来说,旋转和翻转而成的手链是相同的。
旋转:
5颗珠子一共有5种旋转方式,分别是旋转i颗(0<=i<5)。
对于每种旋转,共有3^(gcd(i,5))种解决方案。
a=sum(3^(gcd(i,5)))(0<=i<5)
翻转:
奇数个珠子共有5个翻转方式。
对于每种翻转,共有3^((5+1)/2)种解决方案。
b=n*3^((5+1)/2)
所以最终的答案为(a+b)/n
2409的代码:
#include#include #include #include #include #include #define LL long long using namespace std; LL pows[101]; int t; int gcd(int n,int m) { if(n