这道题应该是比较裸的一道题目了。
最开始做的时候完全想不到用什么gcd之类的东西。。。
然后直接模拟旋转和翻转的过程求置换群去了。
虽然结果是对的,不过是n2的算法,还好题目的数据很小。
先进的算法可以看http://blog.csdn.net/shiren_Bod/article/details/5664934/
/*
ID: sdj22251
PROG: subset
LANG: C++
*/
#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <cmath>
#include <ctime>
#define MAXN 1111111
#define MAXM 104444
#define INF 100000000
#define eps 1e-7
#define L(X) X<<1
#define R(X) X<<1|1
using namespace std;
int a[33][33], b[33];
long long as[33][33];
int v[33];
int n, k;
long long sum;
void get()
{
for(int j = 1; j <= n; j++)
{
memset(v, 0, sizeof(v));
int cnt = 0;
for(int i = 1; i <= n; i++)
{
int t = a[j][i];
if(!v[t]) cnt++;
else continue;
while(t != i)
{
t = a[j][t];
v[t] = 1;
}
}
b[j] = cnt;
}
}
void init()
{
for(int i = 0; i < n; i++)
for(int j = 1; j <= n; j++)
a[i + 1][j] = (i + j - 1) % n + 1;
get();
for(int q = 1; q <= n; q++)
{
sum += (long long )pow(k, b[q]);
}
for(int i = 0; i < n; i++)
for(int j = 1; j <= n / 2; j++)
swap(a[i + 1][j], a[i + 1][n - j + 1]);
get();
for(int q = 1; q <= n; q++)
{
sum += (long long )pow(k, b[q]);
}
}
int main()
{
k = 3;
while(scanf("%d", &n) != EOF)
{
if(n == -1) break;
if(n == 0) {puts("0"); continue;}
sum = 0;
init();
sum /= 2 * n;
printf("%I64d\n", sum);
}
return 0;
}
分享到:
相关推荐
poj 2409 Let it Bead.md
北大POJ1129-Channel Allocation【四色定理】 解题报告+AC代码
POJ 1006 源代码——中国剩余定理分析POJ 1006 源代码——中国剩余定理分析POJ 1006 源代码——中国剩余定理分析
北大POJ1006-Biorhythms【中国剩余定理】 解题报告+AC代码
ACM组合数学波利亚计数解析,通过例题解释波利亚计数的简单入门用法。
poj 1308 Is It A Tree_.md
POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类
poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...
7.组合数学 //Polya定理 8.模拟 9.数据结构 //并查集、堆 10.博弈论 //表示举例 非主流算法: 1.送分题 2.构造 3.高精度 4.几何 5.排序 6.日期/时间处理 (这类题目相当多的) 7.数学方法
北大POJ1094-Sorting It All Out 解题报告+AC代码
POJ第1861题源码 POJ第1861题源码 POJ第1861题源码
poj分类poj分类poj分类poj分类
北大POJ1159-Palindrome 解题报告+AC代码
POJ 1300 Door Man:无向图、欧拉定理、gets、sscanf
对于POJ1852题目和详细的解答,代码已经通过
poj 3414解题报告poj 3414解题报告poj 3414解题报告poj 3414解题报告
poj 1012解题报告poj 1012解题报告poj 1012解题报告poj 1012解题报告
C语言 poj npu 西工大 C语言Poj答案全完整打包,给有需要的朋友
poj 2329解题报告poj 2329解题报告poj 2329解题报告poj 2329解题报告
poj 1659解题报告poj 1659解题报告poj 1659解题报告poj 1659解题报告