题意:

给出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 <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
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<len;i++)if(s[i]=='A' && s[i]=='C') cnt++;return cnt;
}
bool can(long long num1,long long num2,long long suf1,long long suf2,long long pre1,long long pre2){if(xx1*num1+xx2*num2+num[1][2]*(suf1=='A' && pre2=='C')+num[2][2]*(suf2=='A' && pre2=='C')+num[2][1]*(suf2=='A' && pre1=='C')==x){///cout<<"n::"<<num[1][2]<<' '<<num[2][2]<<' '<<num[2][1]<<endl;return true;}elsereturn false;
}
bool print(long long num1,long long num2, char suf1,char suf2,char pre1,char pre2){if(n==1 && pre1 != suf1) return false;if(m==1 && pre2 != suf2) return false;if(n%2==0){ if(num1==n/2) if(!(suf1=='C' && pre1=='A')) return false;}else if(num1==n/2)if ((!(pre1=='A'||suf1=='C'))&&(n!=1))return false;if(m%2==0){ if(num2==m/2) if(!(suf2=='C' && pre2=='A')) return false;}else if(num2==m/2) if ((!(pre2=='A'||suf2=='C'))&&(m!=1)) return false;if(n%2==0){if(num1==n/2){for(long long i=1;i<=num1;i++)   cout<<"AC";}else{cout<<pre1;for(long long i=1;i<=num1;i++) cout<<"AC";for(long long i=1;i<=n-num1*2-2;i++)  cout<<"B";cout<<suf1;}}else{if(num1==n/2){if(n==1) cout<<pre1;elseif(pre1=='A'){for(long long i=1;i<=num1;i++)   cout<<"AC";cout<<suf1;}else if(suf1=='C'){cout<<pre1;for(long long i=1;i<=num1;i++)  cout<<"AC";}}else{cout<<pre1;for(long long i=1;i<=num1;i++)    cout<<"AC";for(long long i=1;i<=n-num1*2-2;i++)  cout<<"B";cout<<suf1;}}cout<<endl;if(m%2==0){if(num2==m/2){for(long long i=1;i<=num2;i++)    cout<<"AC";}else{cout<<pre2;for(long long i=1;i<=num2;i++) cout<<"AC";for(long long i=1;i<=m-num2*2-2;i++)  cout<<"B";cout<<suf2;}}else{if(num2==m/2){if(m==1) cout<<pre2;elseif(pre2=='A'){for(long long i=1;i<=num2;i++)   cout<<"AC";cout<<suf2;}else if(suf2=='C'){cout<<pre2;for(long long i=1;i<=num2;i++)  cout<<"AC";}}else{cout<<pre2;for(long long i=1;i<=num2-1;i++)  cout<<"AC";for(long long i=1;i<=m-num2*2-2;i++)  cout<<"B";cout<<suf2;}}cout<<endl;return true;
}
int main(){
#ifndef ONLINE_JUDGEfreopen("G:/in.txt","r",stdin);
#endifcin>>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<<xx1<<' '<<xx2<<endl;//                                                                        cout<<num1<<' '
//                                                                        <<num2<<' '
//                                                                        <<(char)pre1<<' '
//                                                                        <<(char)pre2<<' '
//                                                                        <<(char)suf1<<' '
//                                                                        <<(char)suf2<<' '<<endl;if(print(num1,num2,suf1,suf2,pre1,pre2)){return 0;}}cout<<"Happy new year!"<<endl;
}

CF 379D NewYearLetter [dp+暴力]相关推荐

  1. 数位dp ---- 暴力 + 二进制的数位dp 2020济南 L Bit Sequence

    题目链接 题目大意 f(x)=x的二进制中1的个数f(x)=x的二进制中1的个数f(x)=x的二进制中1的个数 给你一个数组[a1,a2,a3...,am]m∈[1,100][a_1,a_2,a_3. ...

  2. 根号均摊 ---- E. Xenia and Tree(树形dp + 暴力根号均摊)

    题目大意 题目大意: 你有一颗树:树开始时候1号点是红色的 现在就是你有两次操作: 1 u 把u点涂成红色 2 u 询问离u点最近红点在哪里? 数据范围是n,m∈[1,1e5]n,m\in[1,1e5 ...

  3. Codeforces Round #743 (Div. 2) E. Paint 区间dp + 暴力

    传送门 文章目录 题意: 思路: 题意: 给你一个有nnn个像素的图像,每个像素都有一个颜色aia_iai​,保证每种颜色的图像不会超过202020个.你现在每次可以选择一个颜色,并选择一段连续的像素 ...

  4. UVA 10074 Take the Land dp/暴力+剪枝

    原题传送门:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  5. 2020牛客暑期多校训练营(第八场)E.Enigmatic Partition(差分+隔项差分/dp+暴力)

    题目 n的m划分是把n划分成m个数之和,令,要求满足: ,, 计f(n)为n的满足上述限制的划分数, T(T<=1e4)组询问,每次给出l,r(1<=l<=r<=1e5),询问 ...

  6. CF 335B. Palindrome(DP)

    题目链接 挺好玩的一个题,1Y... 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> ...

  7. cf 1060e 树形dp 树上任意两点的距离和

    题意: 给出一个树,把树上任意两个相隔一个点的点加一条边,问加完边之后任意两点的距离和是多少.   参考博客 :https://blog.csdn.net/Mr_Treeeee/article/det ...

  8. Codeforces 57C Array dp暴力找到规律

    主题链接:点击打开链接 的非增量程序首先,计算, 如果不增加的节目数量x, 非减少一些方案是x 答案就是 2*x - n 仅仅需求得x就可以. 能够先写个n3的dp,然后发现规律是 C(n-1, 2* ...

  9. CF 811C (DP)

    http://codeforces.com/problemset/problem/811/C 题意是一群人在坐火车.先告诉你有n个人,然后告诉你n个目的地(用数字表示的).目的地一样的所有人要么都在一 ...

最新文章

  1. 将vim打造成IDE编程环境
  2. 观点 | 容器内应该运行什么?
  3. boost::coroutine模块实现parallel的测试程序
  4. C语言实现随机快速排序random quick sort算法(附完整源码)
  5. C++11与设计模式的交流
  6. Django返回数据给ajax,Django返回JsonResponse并在ajax请求中捕获数据
  7. 推荐:PHPCMS v9 安全防范教程!
  8. vue+echart 利用散点图实现柱状时间驻留图
  9. 单片机常用的14个C语言算法,看过的都成了大神!
  10. ae万能弹性表达式_18种常用AE表达式解析【建议收藏】
  11. 第1课:通过案例对SparkStreaming 透彻理解三板斧
  12. 蓝绿红黑灰|常用的发布方式
  13. 怎么拯救一个不大靠谱的数据库系统 (5 不靠谱的前生)
  14. html表格··表格样式··长表格
  15. java sign函数_C / C ++中是否有标准的符号函数(signum,sgn)?
  16. 【知识点总结】【CSP考前复习】图论大杂烩【未完】
  17. 大家在人生低谷时有多惨,怎么熬过来的(五)
  18. idea中找不到maven projects的集中解决办法
  19. Kafka手动提交偏移量的作用到底是什么???
  20. linux的aux命令,Linux中 ps aux 命令

热门文章

  1. IDEA Debug时报错Cannot start compilation: the output path is not specified for module““
  2. IDEA spring之p命名空间注入
  3. Unity3D 如何复制内容到剪切板
  4. 创业板首批十家公司今天集体招股
  5. HUE查看oozie的正在执行的workflow任务的运行情况,状态等
  6. Android 新版v2签名渠道包工具
  7. 工业物联网——水冷式中央空调监测系统
  8. (2)【重点】日志系统的搭建及代码debug方法
  9. 基于生产者-消费者模式的桌面搜索器
  10. 戴尔笔记本如何用U盘重装Win10系统?