我爱OJ 2023-08-27 09:54 采纳率: 78.8%
浏览 4

(关键词-Input)

Description

在一串未打结的项链上(意思就是说项链的左端和右端不相连),有N颗珠子,你有M种颜色,然后就问你有多少种方法将每一颗珠子都染上颜色,使得任意两颗相邻的珠子的颜色不同。
Input

输入只有一行,三个正整数N、M和P,之间以一个空格隔开。
Output

输出只有一行,表示染色的方法总数模P。
Sample Input
5 4 13
Sample Output
12
HINT

样例一共有324种染色方法,对13取模后是12。

对于10%的数据,N=1,M<=10,P<=10;

对于20%的数据,N<=10,M<=10,P<=100;

对于50%的数据,N,M,P<=1,000,000,000;

对于100%的数据,1<=N,M,P<=1,000,000,000,000,000,000,且M>=2。

TLE代码贴一个,可以用stl,但是不能用vector

#include <iostream>
using namespace std;
long long dp[2]; 
long long ans(long long N, long long M, long long P) {
    dp[1] = M;
    for (int i = 2; i <= N; ++i) {
        dp[i % 2] = (dp[(i - 1) % 2] * (M - 1)) % P;
    }
    return dp[N % 2];
}

int main() {
    long long N, M, P;
    cin >> N >> M >> P;
    long long result = ans(N, M, P);
    cout << result;
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 波塞冬~ 2023-08-27 10:47
    关注

    单链表或者stl的list

    评论

报告相同问题?

问题事件

  • 创建了问题 8月27日