[BZOJ1008][HNOI2008]越狱

题目大意

求解一个由 (1 cdots m) 组成的长度为 (n) 的数列, 使得存在两个相邻的数是相同的的种数

思路

不妨从反面思考,答案就是总数减去两两不同的

#include <bits/stdc++.h>

typedef long long ll;
const int p = 100003;

ll qpow(ll x, ll y) {
	ll res = 1;
	for (; y; y >>= 1, x = x * x % p) if (y & 1) res = res * x % p;
	return res;
}

int main() {
	ll a, b; scanf("%lld %lld", &a, &b);
	printf("%lld", ((qpow(a, b) - (qpow(a - 1, b - 1) * a)) % p + p) % p);
}
原文地址:https://www.cnblogs.com/Alessandro/p/9970001.html