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 ...
 
随机推荐
- vue-router路由讲解
			
此文章用来系统讲解vue-router路由 安装 只介绍npm安装 npm install vue-router --save 项目所需依赖 在main.js或者app.vue中导入 import V ...
 - Android中的Context(一)
			
Android中的Context(一) 在Android开发中,Context可以说是我们接触地非常多的一个概念了,也译作"上下文",但是这个上下文到底是什么却并不好理解. 通俗的 ...
 - JQuery 方法合集(懒人备记)
			
原创文章,转载请私信.谢谢~ PS:请将jquery的引用文件放在head的标签内 语法:$(selector).action() $(document).ready(function(){ // 开 ...
 - Intellij 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099,端口被占用
			
代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099 端口被占用 解决方案: 1.查找出占用进程id 2.杀死进程 ...
 - 阿里巴巴开源项目汇总-(JAVA)
			
来源:https://segmentfault.com/a/1190000017346799 1.分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud ...
 - 微信小程序-解决下拉刷新报错
			
关于“enablePullDownRefresh”: “true” 一.使用方式 在 Page 中定义 onPullDownRefresh 处理函数,监听该页面用户下拉刷新事件.需要在 config ...
 - Linux内核数据结构之kfifo详解
			
本文分析的原代码版本: 2.6.24.4 kfifo的定义文件: kernel/kfifo.c kfifo的头文件: include/linux/kfifo.h kfifo是内核里面的一个First ...
 - 【SoftwareTesting】Homework2
			
For the Program1, For Question1: The fault is that in the loop condition, ' i ' should be not less t ...
 - 初读"Thinking in Java"读书笔记之第五章 --- 初始化与清理
			
用构造器确保初始化 构造器可以确保每个对象都会得到初始化,Java毁在创建对象时自动调用构造器. 构造器采用与类名相同的名称,因此并不适合"每个方法首字母小写的风格". 构造器默认 ...
 - Python PIL
			
Python PIL PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. ...