zoukankan      html  css  js  c++  java
  • 题解 UVA10294 【Arif in Dhaka (First Love Part 2)】

    群置换。

    共有两种置换,旋转和对称。


    对于旋转,旋转i颗珠子时\((0<=i<n)\)

    举例1,旋转4颗珠子

    1 2 3 4 5 6

    5 6 1 2 3 4

    1-5-3 2-6-4

    2个循环,每组3个

    举例2,旋转3颗

    1 2 3 4 5 6

    4 5 6 1 2 3

    1-4 2-5 3-6

    3个循环,每组2个

    循环数量:\(gcd(n,i)\)

    这个我证不出来/dk,所有题解都说显然,要不就是举例论证。

    每个循环内部都是同一种珠子,才能保证置换后整体不变。

    每个循环贡献\(t^{gcd(n,i)}\)

    \(a=\sum t^{gcd(n,i)}\)


    对于对称,分成n为奇数和偶数两种情况。

    奇数:

    n个,切开一个珠子,即有\((n-1)/2\)个循环节为2,1个循环节为1的。相当于有\((n+1)/2\)个循环节。

    \(b=n*t^{(n+1)/2}\)

    偶数:

    分两种情况。

    1.n/2个,切开两个珠子。同理有\((n-2)/2+2\)\(n/2+1\)个循环节

    2.n/2个,把珠子分成两半,n/2个循环节

    \(b=(n/2)*(t^{n/2+1}+t^{n/2})\)

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    LL n,t,f[55];
    LL power(LL x,LL y){
    	return f[y];
    }
    LL xz(){
    	LL ret=0;
    	for(LL i=0;i<n;i++)
    		ret+=power(t,__gcd(n,i));
    	return ret;
    }
    LL dc(){
    	LL ret=0; 
    	if(n&1) ret+=n*power(t,(n+1)/2);
    	else ret+=(n/2)*(power(t,n/2)+power(t,n/2+1));
    	return ret;
    }
    int main(){
    	while(scanf("%lld%lld",&n,&t)==2){
    		f[0]=1;
    		for(LL i=1;i<=n;i++) f[i]=f[i-1]*t;
    		LL a=xz(),b=dc();
    		printf("%lld %lld\n",a/n,(a+b)/(2*n));
    	}
    	return 0;
    }
    
    
    qaqaq
  • 相关阅读:
    [状压DP]JZOJ 3293 阶乘字符串
    [线段树][Splay][树状数组]JZOJ 3292 发牌
    MySQL之索引
    MySQL(二)
    mysql 练习题
    前端 jQuery
    关于vertical-align和line-height的真知灼见
    CSS语法
    HTML初识
    HTTP协议
  • 原文地址:https://www.cnblogs.com/zdsrs060330/p/13095072.html
Copyright © 2011-2022 走看看