• Codeforces Round #533(Div. 2) C.Ayoub and Lost Array


    链接:https://codeforces.com/contest/1105/problem/C

    题意:

    给n,l,r。

    一个n长的数组每个位置可以填区间l-r的值。

    有多少种填法,使得数组每个位置相加的和是3的倍数

    思路:

    赛后看代码都看不懂的题。

    dp,

    从1个数组扩展到n个数组,

    dp[i][j]是加上第i个数组后,分别余0,1,2的个数。

    余0则是,i-1余0*自己余0+(i-1余1*自己余2)+(i-1余2*自己余1)

    剩下同理

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int MAXN = 2*1e5+10;
    const int MOD = 1e9+7;
    LL dp[MAXN][3];
    
    int main()
    {
        int n,l,r;
        cin >> n >> l >> r;
        dp[0][0] = 1,dp[0][1] = 0,dp[0][2] = 0;
        int mod0 = r/3-(l-1)/3,mod1 = (r+2)/3-(l+1)/3,mod2 = (r+1)/3-(l)/3;
        for (int i = 1;i<=n;i++)
        {
            dp[i][0] = (dp[i-1][0]*mod0%MOD+dp[i-1][1]*mod2%MOD+dp[i-1][2]*mod1%MOD)%MOD;
            dp[i][1] = (dp[i-1][0]*mod1%MOD+dp[i-1][1]*mod0%MOD+dp[i-1][2]*mod2%MOD)%MOD;
            dp[i][2] = (dp[i-1][0]*mod2%MOD+dp[i-1][1]*mod1%MOD+dp[i-1][2]*mod0%MOD)%MOD;
        }
        cout << dp[n][0] << endl;
    
        return 0;
    }
    

      

  • 相关阅读:
    设置eclipse编码
    前端基础知识
    微信小程序
    jQuery下拉框
    Vue-cli的安装
    vue的数据交互形式
    node安装和小测试
    shui
    JQ-滚动条下拉无限的加载数据
    HTML-video全屏
  • 原文地址:https://www.cnblogs.com/YDDDD/p/10297683.html
Copyright © 2020-2023  润新知