zoukankan      html  css  js  c++  java
  • NOIP 2014 解方程

    描述

    已知多项式方程:

    a0+a1x+a2x2+...+anxn=0

    求这个方程在[1, m]内的整数解(n 和 m 均为正整数)。

    格式

    输入格式

    输入共 n+2 行。

    第一行包含 2 个整数 n、m,每两个整数之间用一个空格隔开。

    接下来的 n+1 行每行包含一个整数,依次为a0,a1,a2,...,an

    输出格式

    第一行输出方程在[1, m]内的整数解的个数。

    接下来每行一个整数,按照从小到大的顺序依次输出方程在[1, m]内的一个整数解。

    样例1

    样例输入1

     
    2 10
    1
    -2
    1
    

    样例输出1

     
    1
    1
    

    样例2

    样例输入2

     
    2 10
    2
    -3
    1
    

    样例输出2

     
    2
    1
    2
    

    样例3

    样例输入3

     
    2 10
    1
    3
    2
    

    样例输出3

     
    0

    限制

    对于 30%的数据,0 < n ≤ 2, |ai| ≤ 100,an ≠ 0, m ≤ 100;

    对于 50%的数据,0 < n ≤ 100, |ai| ≤ 10100 ,an ≠ 0,m ≤ 100;

    对于 70%的数据,0 < n ≤ 100, |ai| ≤ 1010000 ,an ≠ 0,m ≤ 10000;

    对于 100%的数据,0 < n ≤ 100, |ai| ≤ 1010000 ,an ≠ 0,m ≤ 1000000。

    来源

    NOIP2014 提高组 Day2

     

    今天重新做了一下NOIP原题,当时啥也不会,就直接输出0,搞了10分,今天看看撑死也就30,50了,用了网上的一种hash法勉强搞到70分,AC的还未看懂,下面给个标准的题解吧,争取早日理解。

    30% : 穷举x,判断等式是否成立。

    50% : 在30%的做法中加入高精度乘法,加法。不用高精减的原因是,只要把符号相同的项移到等式一边,最后再计算等式两边数值是否相等。同时记得要写秦九韶(霍纳法则)优化。

    70% : 根据同余的性质,同余符号两边可以支持同加一个数,同乘一个数。那么可以对等式两边同时对一个数取模,如果同余符号成立,那么原等式有可能成立,反之则筛掉该x。在实际操作时对ai用一个素数取模,然后再穷举x,一边取mod一边运算。于是就可以把单次检验复杂度降为O(n)

    复杂度 : O(nm)

    100% : 根据二项式定理,f(x+p)在展开后必然可以整理成f(x)+T,其中T为关于p的一个多项式,而在同余(mod p)的环境下,T是可以忽略的,也就是说,那么事实上f(x) mod p就是在[1,m]上的周期函数,那么我们只要预处理出f(0)~f(p-1),就相当于知道了f(x) mod p在该区间上的全部情况。于是我们对上述算法优化,从选一个质数改为选取多个小质数pi进行验证,对每一个pi进行0~(pi-1)的预处理后,就可以筛掉一些x。最后输出剩下的x。

    复杂度 : O(+m)

     

  • 相关阅读:
    CSUST 4005-你真的会!(分治思维+线段树)
    CSUST 4007-你真的会图论吗?(思维-三元环)
    CSUST 4002-你真的会字符串吗?(DP)
    Odoo下拉动作列表
    Odoo Shell
    Odoo report
    Odoo Web Service API
    Odoo启动过程
    Odoo10 变化
    Odoo10尝鲜:出勤登记
  • 原文地址:https://www.cnblogs.com/CXCXCXC/p/4652818.html
Copyright © 2011-2022 走看看