zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    观察者设计模式
    JSP中用jsp:param传递中文参数出现乱码
    使用.msi进行安装mysql程序(超详细)
    扒来的lstdc++.6.0.9有效解决方案
    HTML响应状态码
    砸壳
    ipv6
    犀利的文章
    安装ReactNative开发IDE
    创建ReactNative的iOS项目
  • 原文地址:https://www.cnblogs.com/YDDDD/p/10297683.html
Copyright © 2011-2022 走看看