• codeforces 658D D. Bear and Polynomials(数学)


    题目链接:

    D. Bear and Polynomials

    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Limak is a little polar bear. He doesn't have many toys and thus he often plays with polynomials.

    He considers a polynomial valid if its degree is n and its coefficients are integers not exceeding k by the absolute value. More formally:

    Let a0, a1, ..., an denote the coefficients, so . Then, a polynomial P(x) is valid if all the following conditions are satisfied:

    • ai is integer for every i;
    • |ai| ≤ k for every i;
    • an ≠ 0.

    Limak has recently got a valid polynomial P with coefficients a0, a1, a2, ..., an. He noticed that P(2) ≠ 0 and he wants to change it. He is going to change one coefficient to get a valid polynomial Q of degree n that Q(2) = 0. Count the number of ways to do so. You should count two ways as a distinct if coefficients of target polynoms differ.

    Input

    The first line contains two integers n and k (1 ≤ n ≤ 200 000, 1 ≤ k ≤ 109) — the degree of the polynomial and the limit for absolute values of coefficients.

    The second line contains n + 1 integers a0, a1, ..., an (|ai| ≤ k, an ≠ 0) — describing a valid polynomial . It's guaranteed that P(2) ≠ 0.

    Output

    Print the number of ways to change one coefficient to get a valid polynomial Q that Q(2) = 0.

    Examples
    input
    3 1000000000
    10 -9 -3 5
    output
    3
    input
    3 12
    10 -9 -3 5
    output
    2
    input
    2 20
    14 -7 19
    output
    0
    Note

    In the first sample, we are given a polynomial P(x) = 10 - 9x - 3x2 + 5x3.

    Limak can change one coefficient in three ways:

    1. He can set a0 =  - 10. Then he would get Q(x) =  - 10 - 9x - 3x2 + 5x3 and indeed Q(2) =  - 10 - 18 - 12 + 40 = 0.
    2. Or he can set a2 =  - 8. Then Q(x) = 10 - 9x - 8x2 + 5x3 and indeed Q(2) = 10 - 18 - 32 + 40 = 0.
    3. Or he can set a1 =  - 19. Then Q(x) = 10 - 19x - 3x2 + 5x3 and indeed Q(2) = 10 - 38 - 12 + 40 = 0.

    In the second sample, we are given the same polynomial. This time though, k is equal to 12 instead of 109. Two first of ways listed above are still valid but in the third way we would get |a1| > k what is not allowed. Thus, the answer is 2 this time.

    题意:

    问能不能改变一个系数使Q(2)=0;

    思路:

     像二进制那样都变成0,-1,+1,都转移到n位上;再从高位到低位计算; 

    AC代码:

    /*
    2014300227    658D - 26    GNU C++11    Accepted    576 ms    5308 KB
    */
    #include <bits/stdc++.h>
    using namespace std;
    const int N=2e5+4;
    long long a[N],b[N+100];
    int n,l=0,k;
    int main()
    {
    
        scanf("%d%d",&n,&k);
        for(int i=0;i<=n;i++)
        {
            cin>>a[i];
            b[i]=a[i];
        }
        for(int i=0;i<n;i++)
        {
            a[i+1]+=a[i]/2;
            a[i]=a[i]%2;
        }
        for(int i=0;i<=n;i++)
        {
            if(a[i])
            {
                l=i;
                break;
            }
        }
        int answ=0;
        long long sum=0;
        for(int i=n;i>=0;i--)
        {
            sum=sum*2+a[i];
            if(abs(sum)>1e10)break;
            if(i<=l)
            {
                long long x=abs(sum-b[i]);
                if(x==0&&i==n)continue;
                if(x<=k)answ++;
            }
        }
        cout<<answ<<"
    ";
        return 0;
    }
  • 相关阅读:
    Cactus详细讲解
    jexus处理静态文件(处理后缀)
    简单的html兼容(参考js和css的常规写法)
    IOHelper(自制常用的输入输出的帮助类)
    @Html.AntiForgeryToken() 源码分析,表单防伪码的生成
    缓存处理类(MemoryCache结合文件缓存)
    MVC过滤大法(过滤静态文件)
    C#文件监控工具(对追加内容的监控并输出)
    C#在Linux上的开发指南
    对java面试文章的技术漫谈的C#技术理解
  • 原文地址:https://www.cnblogs.com/zhangchengc919/p/5335245.html
Copyright © 2020-2023  润新知