zoukankan      html  css  js  c++  java
  • noip2009提高组题解

    第一题:潜伏者

    模拟

    注意点:

    1. 不同的密文对应的明文不同,反过来,不同的明文对应的密文也不同,我用了两个hash表来实现;
    2. 26个明文字母必须有对应的密文字母,我用了两个计数变量来判断是否26个字母都有匹配。

     

    第二题:Hankson的趣味题

    数论

    对 a0, a1, b0, b1 四个数进行质因数分解,然后确定 x 的各质因数的指数的取值范围,运用乘法原理解决。详细分析见下:

    (引用自http://wenwen.sogou.com/z/q169562042.htm

    Gcd(x,a0)=a1, Gcd(x,b0)=xb0/b1

    设f(a,b) 代表b这个质因子在a中有多少个.

    对于a0的任意质因子t, 若f(a0,t)=f(a1,t) 则只需保证f(x,t)≥f(a1,t), 否则f(x,t)=f(a1,t)

    对于b1的任意质因子t, 若f(b1,t)=f(b0,t) 则只需保证0≤f(x,t)≤f(b1,t), 否则f(x,t)=f(b1,t)

    由于x的所有因子都是b1的子集, 所以我们只需对b1的质因子按如上方法逐个检查这个质因子在x里面的取值范围(若为空则说明无解), 并按照乘法原理统计即可.

    关于分解质因子: 由于b1不会超过2*10^9, 大于50000的质因子不会超过1个, 所以我们只要打出50000以内的素数表即可, 若最后除剩的b1仍未除尽, 说明此时b1一定是一个大于50000的素数.(很巧妙的思想)

    这一题的思路如果光用文字描述会很吃力,用上恰当的表示方法就能得到很清晰的逻辑过程,从而解出题目。而我就是因为没有将思路转换为清楚的表达式,所以在做这道题时花费了很多时间。

     

    第三题:最优贸易

    最短路

    对于每一个点i,统计出从1到i最小的买进价格与从n到i(边反向)最大的卖出价格。

    这个过程借助求最短路的SPFA算法实现,写法基本相同,只是「松弛」操作的含义发生了变化。而我一开始以为用DFS也能求出最大最小值,但是由于同一个点可能多次更新再加上有双向边,DFS无法处理(要么死循环,在双向边上一直来去;要么WA,因为限制了更新次数就有可能无法得到正解;当然如果把允许更新的次数稍微设置大一点也许也能AC),所以还是不得不用了SPFA。

     

    第四题:靶形数独

    搜索

    没有加剪枝,事实上能想到的剪枝也完全不起作用。所以只能卡时。网上有贪心+卡时的策略,这样可以比较容易AC。而我没有用贪心优化,直接卡时,只是搜索顺序改成从后往前,但是卡时变量的大小不好掌控,尝试了很多次才把所有数据AC。

     

    经验教训:

    1. 最好将思路转换为简洁易懂的表达式(如T2),这样有助于更好地解题;
    2. 考场上贪心+卡时是非常好的策略,能够拿到不少分数。
  • 相关阅读:
    微软同步发行Windows 10和Windows 10 Mobile系统更新
    MySQL5.5中文支持
    sqlplus登入和plsql登入的差别
    SQL Server统计信息:问题和解决方式
    OSX: 命令行制作U盘Recovery HD
    Android 使用SwipeBackLayout实现滑动返回上一级页面——实战来袭
    JSP常见的三个编译指令
    matlab-非线性方程求根函数及函数曲线绘制
    走进windows编程的世界-----消息处理函数(3)
    LoadRunner利用ODBC编写MySql脚本
  • 原文地址:https://www.cnblogs.com/lsdsjy/p/3881128.html
Copyright © 2011-2022 走看看