Codeforces 1105C: 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 aaa of integers of size nnn and this array had two interesting properties:
- All the integers in the array were between lll and rrr (inclusive).
- The sum of all the elements was divisible by 333.
Unfortunately, Ayoub has lost his array, but he remembers the size of the array nnn and the numbers lll and rrr, 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+710^9+7109+7 (i.e. the remainder when dividing by 109+710^9+7109+7). In case there are no satisfying arrays (Ayoub has a wrong memory), print 000.
Input
The first and only line contains three integers nnn, lll and rrr (1≤n≤2⋅105,1≤l≤r≤109)(1≤n≤2⋅10^5,1≤l≤r≤10^9)(1≤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+710^9+7109+7 the number of ways to restore the array.
Examples
input
2 1 3
output
3
input
3 2 2
output
1
input
9 9 99
output
711426616
Note
In the first example, the possible arrays are : [1,2],[2,1],[3,3][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][2,2,2].
题意
给出三个整数n,l,rn,l,rn,l,r,要求在[l,r][l,r][l,r]之间的数组成的长度为nnn的序列的和能够整除333
AC代码
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <limits.h>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <set>
#include <string>
#include <time.h>
#define ll long long
#define ull unsigned long long
#define ms(a,b) memset(a,b,sizeof(a))
#define pi acos(-1.0)
#define INF 0x7f7f7f7f
#define lson o<<1
#define rson o<<1|1
#define bug cout<<"-------------"<<endl
#define debug(...) cerr<<"["<<#__VA_ARGS__":"<<(__VA_ARGS__)<<"]"<<"\n"
const double E=exp(1);
const int maxn=1e6+10;
const int mod=1e9+7;
using namespace std;
ll dp[3][maxn];
int n, l, r, t ;
int main(int argc, char const *argv[])
{
ios::sync_with_stdio(false);
cin>>n>>l>>r;
int num0,num1,num2;//余数为i的个数
num0=r/3-(l-1)/3;
num1=r/3+(r%3>=2)-(l-1)/3-((l-1)%3>=2);
num2=r-l+1-num0-num1;
dp[0][1]=num0;
dp[1][1]=num1;
dp[2][1]=num2;
for(int i=2;i<=n;i++)
{
dp[0][i]=((dp[0][i-1]%mod*(num0%mod))%mod+(dp[1][i-1]%mod*num2%mod)%mod+(dp[2][i-1]%mod*num1%mod)%mod)%mod;
dp[1][i]=((dp[0][i-1]%mod*(num1%mod))%mod+(dp[1][i-1]%mod*num0%mod)%mod+(dp[2][i-1]%mod*num2%mod)%mod)%mod;
dp[2][i]=((dp[0][i-1]%mod*(num2%mod))%mod+(dp[1][i-1]%mod*num1%mod)%mod+(dp[2][i-1]%mod*num0%mod)%mod)%mod;
}
cout<<dp[0][n]%mod<<endl;
return 0;
}
Codeforces 1105C: Ayoub and Lost Array(递推)的更多相关文章
- Codeforces 1105C Ayoub and Lost Array (计数DP)
<题目链接> 题目大意: 有一个长度为 n 的数列的未知数列,数列的每一个数的值都在区间 [l,r] 的范围内.现在问你能够构成多少个这样的数组,使得数组内的所有数的和能够被 3 整除. ...
- CodeForces 429 B Working out(递推dp)
题目连接:B. Working out 我想了很久都没有想到怎么递推,看了题解后试着自己写,结果第二组数据就 wa 了,后来才知道自己没有判选择的两条路径是否只是一个交点. 大概思路是:先预处理出每个 ...
- Codeforces Round #271 (Div. 2)D(递推,前缀和)
很简单的递推题.d[n]=d[n-1]+d[n-k] 注意每次输入a和b时,如果每次都累加,就做了很多重复性工作,会超时. 所以用预处理前缀和来解决重复累加问题. 最后一个细节坑了我多次: print ...
- codeforces 696C PLEASE 概率dp+公式递推+费马小定理
题意:有3个杯子,排放一行,刚开始钥匙在中间的杯子,每次操作,将左右两边任意一个杯子进行交换,问n次操作后钥匙在中间杯子的概率 分析:考虑动态规划做法,dp[i]代表i次操作后的,钥匙在中间的概率,由 ...
- [Codeforces676B]Pyramid of Glasses(递推,DP)
题目链接:http://codeforces.com/problemset/problem/676/B 递推,dp(i, j)表示第i层第j个杯子,从第一层开始向下倒,和数塔一样的题.每个杯子1个时间 ...
- codeforces D. Queue 找规律+递推
题目链接: http://codeforces.com/problemset/problem/353/D?mobile=true H. Queue time limit per test 1 seco ...
- Codeforces Round #271 (Div. 2) D. Flowers (递推)
题目链接:http://codeforces.com/problemset/problem/474/D 用RW组成字符串,要求w的个数要k个连续出现,R任意,问字符串长度为[a, b]时,字符串的种类 ...
- codeforces 735C Tennis Championship(贪心+递推)
Tennis Championship 题目链接:http://codeforces.com/problemset/problem/735/C ——每天在线,欢迎留言谈论. 题目大意: 给你一个 n ...
- Codeforces Round #533 (Div. 2) C. Ayoub and Lost Array 【dp】
传送门:http://codeforces.com/contest/1105/problem/C C. Ayoub and Lost Array time limit per test 1 secon ...
随机推荐
- python机器可读数据-XML
XML XML是一门标记语言.也就是说,它具有包含格式化数据的文档结构. XML文档本质上只是格式特殊的数据文件. 在XML文件中有两个位置可以保存数据值:2个标签之间,标签的属性. 导入XML数据 ...
- 基于centos6.5安装部署mongdb3.6
注意:不同的版本的centos,mongdb安装方式不同,请注意版本号!! 基于centos6.5安装部署mongdb3.6 方式有多种,本文介绍使用wget命令来下载获取mongdb,具体命令如下 ...
- vue项目使用前端框架开发,实现滑动效果,若不刷新页面则无法达到预期效果的问题及解决方法
滑动等效果的初始化时机很重要,在vue项目开发中,需到mounted()钩子函数 (当组件中的DOM结构被渲染好并放到页面中后,会执行这个钩子函数,此时即可初始化滑动效果的js代码). 若组件未挂载到 ...
- Context Encoder论文及代码解读
经过秋招和毕业论文的折磨,提交完论文終稿的那一刻总算觉得有多余的时间来搞自己的事情. 研究论文做的是图像修复相关,这里对基于深度学习的图像修复方面的论文和代码进行整理,也算是研究生方向有一个比较好的结 ...
- dict的几个要点
1. 采用key,value键-值对进行存储 2. key必须是不可变对象 3. key值不能重复 添加元素: aDict = {'1':'aaa','b':'bbb','3':'ccc'} aDic ...
- hdu4003详解(树形dp+多组背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 Find Metal Mineral Time Limit: 2000/1000 MS (Jav ...
- 2017-10-6模拟赛T3 丝(filament)
题目 题解 20分实在想不到是什么做法…… 40分做法,从小到大枚举最小循环节长度,O(n) check即可,总复杂度O(n^2). 100分做法: 看到数据范围,T*n<=10^6,可知这题需 ...
- js中bind的用法,及与call和apply的区别
call和apply的使用和区别不再做阐述,可以参考我的另一篇随笔<JavaScript中call和apply方法的使用>(https://www.cnblogs.com/lcr-smg/ ...
- 2Sum问题
2Sum问题是3Sum和4Sum的基础,很多OJ都是以此为最简单的练手题的. 题目描述: 从一个数组里找出两个和为target的数. LeetCode上的描述: Given an array of i ...
- re正则表达式匹配字符串中的数字
re.match(r'.*-(\d*).html',url_1).group(1) \d+匹配1次或者多次数字,注意这里不要写成*,因为即便是小数,小数点之前也得有一个数字:\.?这个是匹配小数点的, ...