牛客 24639 简单计数
题目描述
你在一个有 n 个城市的国家中行走,城市从 1 到 n 依次编号
任意两个城市之间都有一条双向道路可以通行,且你可以花一天的时间从当前所在的城市到达任意一个别的城市
由于你比较闲的无聊,所以你不会连续两天都呆在同一个城市,也就是说每天你所在的城市都不相同(这句话的意思是,对于相邻的两天,你所在的城市应该不同)
一开始你在 1 号城市,求经过 k 天后你回到 1 号城市的方案数
当然如果不存在任意一种方案就输出 0 就好了
输入描述
第一行两个整数 n,k
输出描述:
一行一个整数表示答案对 998244353 取模后的结果
示例1
输入
1 1
输出
0
看到取模基本上就是找规律的题了,不难发现答案就是:
1.k为偶数:f(k)=(n-1)k-1-(n-1)k-2+……+(n-1)
2.k为奇数:f(k)=(n-1)k-1-(n-1)k-2+……-(n-1)
然后等比数列求和即可,注意分母取模:
#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
const int mod=998244353;
ll f(ll a,ll b){
ll ans=1;
while(b){
if(b&1){
ans=ans*a%mod;
}
a=a*a%mod;
b>>=1;
}
return ans;
}
int main()
{
ll n,k;
cin>>n>>k;
ll o=1;
if(k%2==1){
o=-1;
}else{
o=1;
}
ll cnt=((o*(n-1)+f(n-1,k)+mod)%mod*f(n,mod-2))%mod;
cout<<cnt<<endl;
}