牛客 24639 简单计数

牛客 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;
}
发布了235 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43765333/article/details/103871664