题目|C. Ayoub and Lost Array(思维dp)

题目|C. Ayoub and Lost Array(思维dp)
文章图片





Codeforces Round #533 (Div. 2)
分析:用dp做,从一位开始递推,取余0,取余1,取余2,互相组合。然后逐渐到n。

#include using namespace std; #define ll long long const ll mod=1e9+7; ll dp[200000+5][5]; int main() { ll n,l,r; while(cin>>n>>l>>r) { ll a,b,c; a=r/3-(l-1)/3; //l,r之间取余3mod0的 b=(r+2)/3-(l+1)/3; //l,r之间取余3mod1的 c=(r+1)/3-l/3; //l,r之间取余3mod2的 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]*a%mod+dp[i-1][1]*c%mod+dp[i-1][2]*b%mod)%mod; 前i的几个数取余为0的数量 dp[i][1]=(dp[i-1][0]*b%mod+dp[i-1][1]*a%mod+dp[i-1][2]*c%mod)%mod; 前i的几个数取余为1的数量 dp[i][2]=(dp[i-1][0]*c%mod+dp[i-1][1]*b%mod+dp[i-1][2]*a%mod)%mod; 前i的几个数取余为2的数量 } cout<

【题目|C. Ayoub and Lost Array(思维dp)】

    推荐阅读