zoukankan      html  css  js  c++  java
  • codeforces 1105C

    题目链接:https://codeforces.com/problemset/problem/1105/C

    (dp[i][0/1/2])表示前 i 个数之和模 3 余 0/1/2 时的方案数
    直接转移即可

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<cmath>
    #include<stack>
    #include<queue>
    using namespace std;
    typedef long long ll;
    
    const int maxn = 200010;
    const int mod = 1000000007;
    
    int n,l,r;
    int dp[maxn][3]; // 第 i 项,模 3 的余数是 j 的方案数 
    
    ll read(){ ll s=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0' && ch<='9'){ s=s*10+ch-'0'; ch=getchar(); } return s*f; }
    
    int main(){
    	n = read(), l = read(), r = read();
    	dp[0][0] = 0;
    	
    	int cnt1 = r/3 - (l-1)/3; // 3的倍数的个数
    	int cnt2 = (r+1)/3 - l/3; //  模 3 余 2 
    	int cnt3 = (r+2)/3 - (l+1)/3; // 模 3 余 1 
    	
    	dp[1][0] = cnt1, dp[1][1] = cnt3, dp[1][2] = cnt2; 
    	for(int i=2;i<=n;++i){
    		dp[i][0] = ((1ll * dp[i-1][0] * cnt1)%mod + (1ll * dp[i-1][1] * cnt2)%mod + (1ll * dp[i-1][2] * cnt3)%mod)%mod ;
    		dp[i][1] = ((1ll * dp[i-1][0] * cnt3)%mod + (1ll * dp[i-1][1] * cnt1)%mod + (1ll * dp[i-1][2] * cnt2)%mod)%mod ;
    		dp[i][2] = ((1ll * dp[i-1][0] * cnt2)%mod + (1ll * dp[i-1][1] * cnt3)%mod + (1ll * dp[i-1][2] * cnt1)%mod)%mod ;
    	} 
    	
    	printf("%d
    ",dp[n][0]);
    	
    	return 0;
    }
    
  • 相关阅读:
    springmvc+mybatis多数据源切换
    Tomcat 8.5 配置自动从http跳转https
    Tomcat 8.5 配置 域名绑定
    本地测试Tomcat配置Https访问
    Spring boot
    解决IDEA16闪退的问题
    cef
    spring-boot学习资料
    oracle 表空间不足解决办法
    oracle导出表的办法
  • 原文地址:https://www.cnblogs.com/tuchen/p/13823114.html
Copyright © 2011-2022 走看看