zoukankan      html  css  js  c++  java
  • GCJ Qualification Round 2016 D题

    这题就是找规律。小数据还是挺容易想的。大数据得再深入分析一下。

    题意挺绕的。

    其实就是字符串转换。字符串只能有两种字母,L或G。给定K和C,就能通过规则生成目标字符串。

    那么,如果知道了K和C,以及目标字符串,那么是能够倒推出原字符串的。

    现在问题是,目标字符串也不全给你看,限定你最多看s个。但是呢,也不要求你完全倒推出原字符串,而是只需要知道原字符串里是不是至少有一个G字符即可。

    小数据极其简单,为什么呢,因为S=K,而看S个目标串字符完全可以倒推出原字符串啊。

    因为原串的第1个字符,会在目标串的第1个字符;原串的第2个字符,会在目标串的第K+2个字符;原串的第3个字符,会在目标串的第2*K+3个字符……

    然而,仅仅为了知道原串中是不是至少有一个G字符,必然不需要看这么多。于是继续分析。

    例如,当K=5, C=2时,原串共有2^5=32种可能,相应的目标串(长度为25)也有32种,所以,我们最原始的方法,就是在这32种目标串里,每次选一个字符,以筛掉一半,最后去找那个全部为L的目标串(只有这一种才不含G字符,别的情况都含有G字符)。

    然而通过将这32个目标串列出来发现,其实可以通过选择特定字符,一下子筛掉超过一半。

    比如,第一次不是选1号字符,而是选择2号字符。如果2号字符为L,那么不仅说明原串的1号字符是L,而且2号字符也是L,这样一下子就能筛掉3/4的目标串。

    同理,第二次选2*K+4号字符……,这样又能筛掉3/4的目标串。这样总的查看字符数量就几乎减少了一半。不管是不是最优解,但是比之前的笨方法肯定是高效了。

  • 相关阅读:
    面试题总结
    软件测试面试心得
    git上传本地文件到gitee上
    一个测试员失业的自述
    整理了Linux常用命令变量
    java B2B2C多用户商城系统-搜索分词架构分享
    B2B2C商城系统-Table组件封装代码分享
    Javashop 电商系统sso登录实现
    b2b2c商城系统-会员预存款架构及源码分享
    java 商城系统源码分享-snowflake发号器
  • 原文地址:https://www.cnblogs.com/moonbay/p/5372843.html
Copyright © 2011-2022 走看看