[AGC031B] Reversi

[AGC031B] Reversi

题面翻译#

N 块石头摆成一行,从左数第 i 块石头的颜色是 Ci

现在すぬけ会进行 0 次或若干次如下操作:选取两块颜色相同的石头并将两块石头之间的所有石头都染成与这两块石头相同的颜色。

求最终所有可能的石头排列方案数,答案对 109+7 取模。

思路#

考虑 DP。

考虑第 i 个石头,如果第 i 个石头不修改,方案数仍为 dpi1;如果第 i 个石头修改,那么贡献就是第 i 个石头与前面所有颜色相同石头进行操作的可能操作数。

prei 为上一个与 i 颜色相同石头的位置。

所以转移方程为

dpi=dpi1+dpprei

Code#

#include <bits/stdc++.h>

using namespace std;

const int N = 5005000;
const int Mod = 1e9 + 7;

int n;

int a[N];

int cnt,col[N];

int dp[N],last[N];

int main() {
    ios::sync_with_stdio(false);
    cin >> n;

    for(int i = 1;i <= n; i++) {
        cin >> a[i];
    }
    
    for(int i = 1;i <= n; i++) {
        if(a[i] != a[i - 1]) {
            cnt ++;
            col[cnt] = a[i];
        }
    }

    dp[0] = 1;
    for(int i = 1;i <= cnt; i++) {
        dp[i] = dp[i - 1];

        if(last[col[i]]) {
            int j = last[col[i]];
            dp[i] = (dp[i] + dp[j]) % Mod;
        }

        last[col[i]] = i;
    }

    cout << (dp[cnt] + Mod) % Mod << "\n";
    return 0;
}

作者:白简

出处:https://www.cnblogs.com/baijian0212/p/AGC031B.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   -白简-  阅读(20)  评论(3编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu