C. Ayoub and Lost Array

Posted mch5201314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C. Ayoub and Lost Array相关的知识,希望对你有一定的参考价值。

链接

[https://codeforces.com/contest/1105/problem/C]

题意

给你n,表示数组长度,元素的值是l到r,问有多少种方案使得所有元素和整除3

分析

思维dp,看代码吧

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=1e9+7;
const int N=2e5+10; 
ll dp[N][3];//dp[i][j]表示l,r这个区间内i个数的和取余3等于j的方案数 
int main(){
    ll n,l,r;
    //freopen("in.txt","r",stdin);
    while(~scanf("%lld%lld%lld",&n,&l,&r)){
        //容斥原理 
        int a=r/3-(l-1)/3;//l,r这个区间对3取余等于0的个数 
        int b=(r+2)/3-(l+1)/3;//l,r这个区间对3取余等于1的个数
        int c=(r+1)/3-l/3;//l,r这个区间对3取余等于2的个数
        dp[1][0]=a,dp[1][1]=b,dp[1][2]=c;
        for(int i=2;i<=n;i++)
        {
            dp[i][0]=(dp[i-1][0]%mod*a%mod+dp[i-1][1]%mod*c%mod+dp[i-1][2]%mod*b%mod)%mod;
            dp[i][1]=(dp[i-1][0]%mod*b%mod+dp[i-1][1]%mod*a%mod+dp[i-1][2]%mod*c%mod)%mod;
            dp[i][2]=(dp[i-1][0]%mod*c%mod+dp[i-1][1]%mod*b%mod+dp[i-1][2]%mod*a%mod)%mod;
        }
        printf("%lld
",dp[n][0]%mod);
    }
    return 0;
}

以上是关于C. Ayoub and Lost Array的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

C - Ayoub and Lost Array

CF1105C Ayoub and Lost Array

Codeforces 1105C Ayoub and Lost Array