码迷,mamicode.com
首页 > 其他好文 > 详细

C. Ayoub and Lost Array cf dp

时间:2019-02-09 12:08:55      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:题目   www.   visible   include   output   out   possible   一个   ssis   

C. Ayoub and Lost Array
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Ayoub had an array aa of integers of size nn and this array had two interesting properties:

  • All the integers in the array were between ll and rr (inclusive).
  • The sum of all the elements was divisible by 33 .

Unfortunately, Ayoub has lost his array, but he remembers the size of the array nn and the numbers ll and rr , so he asked you to find the number of ways to restore the array.

Since the answer could be very large, print it modulo 109+7109+7 (i.e. the remainder when dividing by 109+7109+7 ). In case there are no satisfying arrays (Ayoub has a wrong memory), print 00 .

Input

The first and only line contains three integers nn , ll and rr (1n2?105,1lr1091≤n≤2?105,1≤l≤r≤109 ) — the size of the lost array and the range of numbers in the array.

Output

Print the remainder when dividing by 109+7109+7 the number of ways to restore the array.

Examples
Input
Copy
2 1 3
Output
Copy
3
Input
Copy
3 2 2
Output
Copy
1
Input
Copy
9 9 99
Output
Copy
711426616
Note

In the first example, the possible arrays are : [1,2],[2,1],[3,3][1,2],[2,1],[3,3] .

In the second example, the only possible array is [2,2,2][2,2,2] .

 

 

这个题目先要意识到这是一个动态规划

他是在范围内取一个元素个数为n,对3的余数为0的集合的方案数。

这个就可以当初一种动态规划,从1到n转移。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+100;
ll mod=1e9+7,dp[maxn][4];//dp[i][j]代表余数为j时,集合元素为i的方案数

int main()
{
    int n,l,r,a=0,b=0,c=0;
    cin>>n>>l>>r;
    int k=(r-l)/3;
    a=b=c=k;
    for(int i=l+3*k;i<=r;i++)
    {
        if(i%3==0) a++;
        if(i%3==1) b++;
        if(i%3==2) c++;
    }
    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][0]%=mod;
        dp[i][0]+=dp[i-1][1]*c%mod;
        dp[i][0]%=mod;
        dp[i][0]+=dp[i-1][2]*b%mod;
        dp[i][0]%=mod;
        dp[i][1]=dp[i-1][0]*b%mod;
        dp[i][1]%=mod;
        dp[i][1]+=dp[i-1][1]*a%mod;
        dp[i][1]%=mod;
        dp[i][1]+=dp[i-1][2]*c%mod;
        dp[i][1]%=mod;
        dp[i][2]=dp[i-1][0]*c%mod;
        dp[i][2]%=mod;
        dp[i][2]+=dp[i-1][1]*b%mod;
        dp[i][2]%=mod;
        dp[i][2]+=dp[i-1][2]*a%mod;
        dp[i][2]%=mod;
    }
    cout<<dp[n][0]<<endl;
    return 0;
}

 

 

C. Ayoub and Lost Array cf dp

标签:题目   www.   visible   include   output   out   possible   一个   ssis   

原文地址:https://www.cnblogs.com/EchoZQN/p/10357249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!