HDU 2865 Birthday Toy(Polya综合)
来源:互联网 发布:js点击缩略图显示大图 编辑:程序博客网 时间:2024/05/12 23:38
题目链接;
HDU 2865 Birthday Toy
题意:
有一个
数据范围:
分析:
和前面POJ 2888 Magic Bracket类似,这里把限制改成了相邻珠子颜色不同且颜色个数范围变为了
对于循环个数
因为
那么循环个数为
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <climits>#include <cmath>#include <ctime>#include <cassert>#define IOS ios_base::sync_with_stdio(0); cin.tie(0);using namespace std;typedef long long ll;const ll mod = (ll)(1e9) + 7;struct Matrix{ int row, col; ll data[10][10]; Matrix () {} Matrix (int k) { row = col = 2; data[1][1] = 0, data[1][2] = 1; data[2][1] = k - 2, data[2][2] = k - 3; } Matrix operator * (const Matrix& rhs) const { Matrix res; res.row = row, res.col = rhs.col; for(int i = 1; i <= res.row; ++i) { for (int j = 1; j <= res.col; ++j) { res.data[i][j] = 0; for(int k = 1; k <= col; ++k) { res.data[i][j] += data[i][k] * rhs.data[k][j]; } res.data[i][j] %= mod; } } return res; } Matrix operator ^ (const int m) const { Matrix res, tmp; tmp.row = res.row = row, tmp.col = res.col = col; memset(res.data, 0, sizeof(res.data)); for(int i = 1; i <= row; ++i) res.data[i][i] = 1; memcpy(tmp.data, data, sizeof(data)); int mm = m; while(mm) { if(mm & 1) res = res * tmp; tmp = tmp * tmp; mm >>= 1; } return res; }};inline ll phi(ll x){ ll res = x; for(ll i = 2; i * i <= x; ++i) { if(x % i == 0) { res = res / i * (i - 1); while(x % i == 0) x /= i; } } if(x > 1) res = res / x * (x - 1); return res;}ll solve(int len, int k){ Matrix res, tmp; tmp = Matrix(k); tmp = tmp ^ len; res.row = 2, res.col = 1; res.data[1][1] = 1, res.data[2][1] = 0; res = tmp * res; return res.data[1][1];}ll quick_pow(int x, ll m){ ll res = 1, tmp = x; while(m) { if(m & 1) res = res * tmp % mod; tmp = tmp * tmp % mod; m >>= 1; } return res;}int main(){ int n, k; while(~scanf("%d%d", &n, &k)) { ll ans = 0; for(int i = 1; i * i <= n; ++i) { if(n % i) continue; ans = (ans + phi(n / i) * solve(i, k) % mod) % mod; if(n / i == i) continue; ans = (ans + phi(i) * solve(n / i, k) % mod) % mod; } printf("%lld\n",ans * k % mod * (k - 1) % mod * quick_pow(n, mod - 2) % mod); } return 0;}
0 0
- HDU 2865 Birthday Toy(Polya综合)
- hdu 2865 Birthday Toy (polya,好题)
- hdu 2865 Birthday Toy 及我对polya的总结
- HDU 2865 Birthday Toy(Polya+矩阵乘法+dp)
- HDU 2481 Toy(Polya综合)
- HDU Birthday Toy 特殊限制的polya
- HDU 2865 Birthday Toy polya 矩阵快速幂 欧拉函数
- HDU 2865 Birthday Toy(ploya好题)
- hdu 2481 Birthday Toy
- Birthday Toy HDU
- hdu 2865 Birthday Toy (置换+DP+矩阵乘法)
- HDU 5080 Colorful Toy (polya定理)
- hdu 5080 - Colorful Toy(2014 AnShan)几何+polya
- HDU 5080 Colorful Toy(polya+计算几何)
- HDU 2481 Toy(08成都现场 Polya,递推,矩阵,数论……)
- hdu 2865 基础polya问题
- hdu 3547(Polya计数)
- hdu 4259 polya定理
- System.Properties和System.getenv区别
- php知识点3-HTTP 头部-Cache-Control
- Java拾遗(一):浅析Java子类和父类的实例化顺序 及 陷阱
- 【Leetcode】Additive Number
- iOS中数据库的增删改查
- HDU 2865 Birthday Toy(Polya综合)
- 网络状态检测------苹果官方示例Reachability的使用
- HDOJ 1210 Eddy's 洗牌问题
- php知识点3-HTTP 头部-Accept-Encoding
- 基于Bmob的仿微信即时聊天软件
- Python用法:命令行和环境
- java 对redis 基本操作
- 什么是md5盐值
- CCCC/GPLT L1-018 大笨钟