Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<algorithm>
- #include<vector>
- #include<map>
- #include <stdio.h>
- #include <string.h>
- using namespace std;
- int ans[4][(int)1e7+1];
- int m=(int)1e9+7;
- long long dp(char c,int n){
- if(ans[c-'A'][n]!=-1) return ans[c-'A'][n]%m;
- if(n==0){
- if(c=='D'){
- ans[c-'A'][n]=1%m;
- return ans[c-'A'][n];
- }
- else {
- ans[c-'A'][n]=0%m;
- return ans[c-'A'][n]%m;
- }
- }
- if(c=='A') {
- ans['A'-'A'][n]=(dp('B',n-1)+dp('C',n-1)+dp('D',n-1))%m;
- return ans['A'-'A'][n]%m;
- }
- if(c=='B'){
- ans['B'-'A'][n]= (dp('A',n-1)+dp('C',n-1)+dp('D',n-1))%m;
- return ans['B'-'A'][n]%m;
- }
- if(c=='C'){
- ans['C'-'A'][n]=(dp('A',n-1)+dp('B',n-1)+dp('D',n-1))%m;
- return ans['C'-'A'][n]%m;
- }
- if(c=='D'){
- ans['D'-'A'][n]= (dp('A',n-1)+dp('B',n-1)+dp('C',n-1))%m;
- return ans['D'-'A'][n];
- }
- return 0;
- }
- int main(){
- //freopen("input 1.txt","r",stdin);
- memset (ans,-1,sizeof(ans));
- int n;
- cin>>n;
- cout<<dp('D',n)<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement