HDU-2017 多校训练赛8-1011-Killer Names
2017-08-17 17:03
531 查看
ACM模版
虽然这个题 A 的人最多,但是我感觉他并不是签到题,因为我推了好久才推出来,毕竟我的数论基础那么差,实在是恼人……
描述
题解
先预处理出来组合数,然后递推就能解决。虽然这个题 A 的人最多,但是我感觉他并不是签到题,因为我推了好久才推出来,毕竟我的数论基础那么差,实在是恼人……
代码
#include <iostream> using namespace std; typedef long long ll; const int MAXN = 2222; const int MOD = 1e9 + 7; int n, m; int C[MAXN][MAXN]; ll p[MAXN]; ll QPow(ll x, ll n) { ll ret = 1; ll tmp = x % MOD; while (n) { if (n & 1) { ret = (ret * tmp) % MOD; } tmp = tmp * tmp % MOD; n >>= 1; } return ret; } void init() { C[0][0] = 1; for (int i = 1; i < MAXN; i++) { C[i][0] = 1; for (int j = 1; j <= i; j++) { C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % MOD; } } } int main(int argc, const char * argv[]) { init(); int T; scanf("%d", &T); while (T--) { scanf("%d%d", &n, &m); for (int i = 1; i <= m; i++) { p[i] = QPow(i, n); } for (int i = 2; i <= m; i++) { for (int j = 1; j < i; j++) { p[i] = (p[i] - p[j] * C[i][j] % MOD + MOD) % MOD; } } ll ans = 0; for (int i = 1; i < m; i++) { for (int j = 1, k = m - i; j <= k; j++) { ans = (ans + p[i] * p[j] % MOD * C[m][i] % MOD * C[k][j] % MOD) % MOD; } } printf("%lld\n", ans); } return 0; }
相关文章推荐
- HDU 2017 多校联合训练赛8 1011 6143 Killer Names 排列组合
- HDU 6055 (2017 多校训练赛2 1011)Regular polygon
- hdu 6143: Killer Names (2017 多校第八场 1011)
- HDU 6043(2017 多校训练赛1 1011) KazaQ's Socks
- HDU 2017 多校联合训练赛2 1011 6055 Regular polygon map&pair
- HDU-2017 多校训练赛6-1011-Classes
- HDU 6106 (2017 多校训练赛6 1011)Classes
- HDU-2017 多校训练赛2-1011-Regular polygon
- HDU-2017 多校训练赛7-1011-Kolakoski
- 2017多校八 1011题 hdu 6143 Killer Names 排列组合
- hdu 6143 Killer Names (2017多校第八场)
- HDU-2017 多校训练赛1-1002-Balala Power!
- HDU-2017 多校训练赛8-1002-Battlestation Operational
- (2017多校2)1011/hdu-6055 Regular polygon(计算几何)
- HDU-2017 多校训练赛3-1008-RXD and math
- HDU-2017 多校训练赛8-1008-Hybrid Crystals
- HDU 2017 多校联合训练赛5 5008 6092 Rikka with sebset
- HDU 6043 (2017 多校训练赛1 1002) Balala Power!
- HDU 6038 (2017 多校训练赛1 1006) Function(图论)
- HDU-2017 多校训练赛9-1008-Numbers