• 短代码.EOF串


    一个只包含EOF三个字符的字符串,并且不存在连续的O,问长度为n的这种串有多少种。
    其中0<n<40。

    递推: e'=e+o+f, o' =e+f, f'=e+o+f
    // 预处理查表
    main(i,n){__int64 d[39]={1,1,1,3};for(;i<39;i++)d[i][1]=d[i-1][0]+d[i-1][2],d[i][2]=d[i][0]=d[i][1]+d[i-1][1],d[i][3]=d[i][1]+d[i][0]*2;while(~scanf("%d",&n))printf("%I64d\n",d[n][3]);}
    // 把eof分开存,去掉二级数组的括号
    main(i,n){__int64 e[39]={1},o[39]={1},f[39]={1},s[39]={3};for(;i<39;i++)f[i]=e[i]=(o[i]=e[i-1]+f[i-1])+o[i-1],s[i]=o[i]+e[i]*2;while(~scanf("%d",&n))printf("%I64d\n",s[n-1]);}
    // e,f总是一样的,于是去掉f
    main(i,n){__int64 e[39]={1},o[39]={1},s[39]={3};for(;i<39;i++)e[i]=(o[i]=e[i-1]*2)+o[i-1],s[i]=o[i]+e[i]*2;while(~scanf("%d",&n))printf("%I64d\n",s[n-1]);}
    // 与其保存总和,不如结果时计算一下
    main(i,n){__int64 e[39]={1},o[39]={1};for(;i<39;i++)e[i]=(o[i]=e[i-1]*2)+o[i-1];while(~scanf("%d",&n))printf("%I64d\n",o[n-1]+e[n-1]*2);}
    // 不再查表,按需计算
    main(i,n){__int64 e,o,t;for(;~scanf("%d",&n);printf("%I64d\n",o+e+e))for(i=e=o=1;i<n;i++)t=o,e=(o=e+e)+t;}
    // 调整一下递推式
    main(n){__int64 e,o,t;for(;~scanf("%d",&n);printf("%I64d\n",o+e+e))for(e=o=1;--n;e=(o=e+e)+t)t=o;}
    // 再调整递推式,去掉临时变量
    main(n){__int64 e,o;for(;~scanf("%d",&n);printf("%I64d\n",o+e+e))for(e=o=1;--n;o=e-o)e+=e+o;}
    // 多一次循环,结果就是e
    main(n){__int64 e,o;for(;~scanf("%d",&n);printf("%I64d\n",e))for(e=o=1;n--;o=e-o)e+=e+o;}
    农夫三拳,这下你还能更短吗。嘿嘿嘿:)
  • 相关阅读:
    企业IT管理员IE11升级指南【1】—— Internet Explorer 11增强保护模式 (EPM) 介绍
    探讨 : Host在IIS上的WCF Service的执行方式
    JavaScript性能优化
    canvas圆形进度条(逆时针)
    微信二次分享无标题无图片问题参考
    Promise学习
    好用的jq复制插件clipboard.js
    掘金好文链接
    js冒泡排序
    基于JQ的记忆翻牌游戏
  • 原文地址:https://www.cnblogs.com/kaikai/p/823649.html
Copyright © 2020-2023  润新知