博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces Good Bye 2013 379D New Year Letter
阅读量:5342 次
发布时间:2019-06-15

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

题目链接:

【题目大意】

      告诉你初始字符串S1、S2的长度和递推次数k, 使用类似斐波纳契数列的字符串合并的递推操作,使得最后得到的字符串中刚好含有x个"AC",现在要你构造出满足条件的S1和S2。

【分析】

      最终结果中有些"AC"可能是应为在合并时一个字符串的尾部和另一个字符串的首部合并而成,这就跟原始字符串的首尾字符有关,不同的情况在K次递推后多产生的"AC"数是不同的,所以这里既要枚举下初始串的首尾字符,计算出因合并产生的"AC"数sum有多少。

      现在可以忽略合并产生的"AC"了,假设S1中有a个"AC",S2中有b个"AC",则经过k次递推由这些"AC"组合成的"AC"数量为:fib[k-2]*a+fib[k-1]*b。

      所以最终的结果为:

         f[k]=fib[k-2]*a+fib[k-1]*b+sum;

     f[k]=x 已知,sum可以枚举获得 ,于是只需枚举a 即可知道 a和b 的值,对于一组 a,b值看能否构造出符合条件的字符串就好了。

     其实可以不用枚举a,用不定方程来解就好了,当a,b很大时速度更快。

【代码】

 

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 long long fib[100]; 7 int k,x,n,m,aa,bb; 8 char ansa[103],ansb[103]; 9 int calc(int s1,int s2)10 {11 int a=s1,b=s2,t;12 int ca=0,cb=0,sum=0;13 for (int i=3;i<=k;++i)14 {15 sum=ca+cb;16 if ((a&2)&&!(a&1)&&(b&8)&&(b&4)) ++sum;17 t=b,b=(a&(3<<2))|(b&3);18 a=t,t=cb,cb=sum,ca=t;19 }20 return sum;21 }22 bool product(int t,int code,char *p,int len)23 {24 int pp=1;25 if (len==1 && ((code>>2)&3)!=(code &3)) return false;26 if (len==2 && code==11) --t;27 if ((code>>2)==3) p[0]='C'; else28 if ((code>>2)==2) p[0]='A'; else p[0]='B';29 if ((code>>2)==2 && t && len>2) --t,p[pp++]='C';30 while (pp
View Code

 

 

【PS】

     基本上半年没写博客了,2014的第一篇~

    元旦快乐!!

转载于:https://www.cnblogs.com/wuminye/p/3500422.html

你可能感兴趣的文章
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
bzoj1048 [HAOI2007]分割矩阵
查看>>
Java中的编码
查看>>
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Zookeeper一致性级别
查看>>
Linux远程登录
查看>>