首页 > 其他 > 详细

C. Ayoub and Lost Array

时间:2019-01-21 22:29:30      阅读:148      评论:0      收藏:0      [点我收藏+]

链接

[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\n",dp[n][0]%mod);
    }
    return 0;
}

C. Ayoub and Lost Array

原文:https://www.cnblogs.com/mch5201314/p/10301308.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!