设为首页 加入收藏

TOP

CF 379D NewYearLetter [dp+暴力]
2015-07-20 17:50:36 来源: 作者: 【 】 浏览:2
Tags:379D NewYearLetter 暴力

题意:

给出k,x,n,m

找出这样的字符串s1,s2,s1长为n,s2长为m

给出规则,sn=sn-1+sn-2

使得第Sk项出现x个"AC"子串

我们很容易知道k次运算后有几个12,几个21,几个22子串,有几个串1,有几个串2

如果我们知道s1中出现了几个AC,s2中出现了几个AC

s1头和尾,s2头和尾巴

我们就能算出k次后能出现几个AC

现在正好反过来,我们都不知道s1,s2,我们要找出这样的s1,s2

那么我们枚举

s1头和尾,s2头和尾巴

s1中出现了几个AC,s2中出现了几个AC

算出来的Sk里面出现的AC数和x是否相等

直到枚举出来这样的

没有的话就输出happy new year

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        using namespace std; long long k,x,n,m; long long lastnum[4][4]; long long num[4][4]; long long x1=1,x2=0; long long xx1=0,xx2=1; long long tmp[4][4]; void copy(long long to[][4],long long from[][4]){ for(long long i=1;i<=2;i++) for(long long j=1;j<=2;j++) to[i][j]=from[i][j]; } void add(long long to[][4],long long from[][4]){ for(long long i=1;i<=2;i++) for(long long j=1;j<=2;j++) to[i][j]+=from[i][j]; } long long ac_num(char* s){ long long cnt=0; long long len=strlen(s); for(long long i=0;i
       
        >k>>x>>n>>m; for(long long i=3;i<=k;i++){ long long xx1tmp=xx1,xx2tmp=xx2; xx1+=x1;xx2+=x2; x1=xx1tmp,x2=xx2tmp; copy(tmp,num); add(num,lastnum); copy(lastnum,tmp); if(i==3) num[1][2]=1; if(i>=4 && i%2==0) num[2][1]++; else if(i>=4) num[2][2]++; } for(long long num1=0;num1<=(n/2);num1++) for(long long num2=0;num2<=(m/2);num2++) for(long long suf1='A';suf1<='C';suf1++) for(long long suf2='A';suf2<='C';suf2++) for(long long pre1='A';pre1<='C';pre1++) for(long long pre2='A';pre2<='C';pre2++) if(can(num1,num2,suf1,suf2,pre1,pre2)){ ///cout<
         
         


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇杭电1171 Big Event in HDU(母函.. 下一篇HDU 3315 My Brute(费用流)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·switch520最新的地址 (2025-12-24 19:19:41)
·微信聊天功能使用了 (2025-12-24 19:19:39)
·websocket和普通的so (2025-12-24 19:19:36)
·Python中文网 - 人生 (2025-12-24 18:49:47)
·【整整648集】这绝对 (2025-12-24 18:49:44)