博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #533(Div. 2) C.Ayoub and Lost Array
阅读量:6907 次
发布时间:2019-06-27

本文共 906 字,大约阅读时间需要 3 分钟。

链接:https://codeforces.com/contest/1105/problem/C

题意:

给n,l,r。

一个n长的数组每个位置可以填区间l-r的值。

有多少种填法,使得数组每个位置相加的和是3的倍数

思路:

赛后看代码都看不懂的题。

dp,

从1个数组扩展到n个数组,

dp[i][j]是加上第i个数组后,分别余0,1,2的个数。

余0则是,i-1余0*自己余0+(i-1余1*自己余2)+(i-1余2*自己余1)

剩下同理

代码:

#include 
using namespace std;typedef long long LL;const int MAXN = 2*1e5+10;const int MOD = 1e9+7;LL dp[MAXN][3];int main(){ int n,l,r; cin >> n >> l >> r; dp[0][0] = 1,dp[0][1] = 0,dp[0][2] = 0; int mod0 = r/3-(l-1)/3,mod1 = (r+2)/3-(l+1)/3,mod2 = (r+1)/3-(l)/3; for (int i = 1;i<=n;i++) { dp[i][0] = (dp[i-1][0]*mod0%MOD+dp[i-1][1]*mod2%MOD+dp[i-1][2]*mod1%MOD)%MOD; dp[i][1] = (dp[i-1][0]*mod1%MOD+dp[i-1][1]*mod0%MOD+dp[i-1][2]*mod2%MOD)%MOD; dp[i][2] = (dp[i-1][0]*mod2%MOD+dp[i-1][1]*mod1%MOD+dp[i-1][2]*mod0%MOD)%MOD; } cout << dp[n][0] << endl; return 0;}

  

转载于:https://www.cnblogs.com/YDDDD/p/10297683.html

你可能感兴趣的文章
Oracle11g DMP 文件导入到 10g
查看>>
双网卡同时使用配置
查看>>
恢复密码
查看>>
20180504早课记录03-Linux
查看>>
11.交换路由远程管理
查看>>
GIT命令
查看>>
rip路由协议基本配置
查看>>
守护进程 python
查看>>
搭建FTP
查看>>
Entity Framework 的事务 DbTransaction
查看>>
Java Service Wrapper简介与使用(转)
查看>>
马哥学习----李洋个人笔记-----rpm包管理器
查看>>
Apache与Nginx的优缺点比较
查看>>
【Linux】Install Redis on Centos
查看>>
keepalived主备节点都配置vip,vip切换异常案例分析
查看>>
我的2014--新的开始,新的征程,加油!
查看>>
排序算法(一)
查看>>
使用jconsole监控tomcat性能情况
查看>>
ligerui grid行编辑示例
查看>>
linux安装或移植zencart系统
查看>>