• △2013山东省ACM竞赛-Alice and Bob


    Alice and Bob

    Description

    Alice and Bob like playing games very much.Today, they introduce a new game.

    There is a polynomial like this: (a0*x^(2^0)+1) * (a1 * x^(2^1)+1)*.......*(an-1 * x^(2^(n-1))+1). Then Alice ask Bob Q questions. In the expansion of the Polynomial, Given an integer P, please tell the coefficient of the x^P.

    Can you help Bob answer these questions?

     

    Input

    The first line of the input is a number T, which means the number of the test cases.

    For each case, the first line contains a number n, then n numbers a0, a1, .... an-1 followed in the next line. In the third line is a number Q, and then following Q numbers P.

    1 <= T <= 20

    1 <= n <= 50

    0 <= ai <= 100

    Q <= 1000

    0 <= P <= 1234567898765432

     

    Output

    For each question of each test case, please output the answer module 2012.

     

    Sample Input

    1
    2
    2 1
    2
    3
    4
    

    Sample Output

    2
    0
    

    HINT

    The expansion of the (2*x^(2^0) + 1) * (1*x^(2^1) + 1) is 1 + 2*x^1 + 1*x^2 + 2*x^3

    题目大意:多项式相乘,写几项就发现规律了。

    (a0x+1)(a1x^2+1)(a2x^4+1)

    =a0a1a2x^7+a1a2x^6+a0a2x^5+a2x^4+a0a1x^3+a1x^2+a0x+1    列出来后发现正好该数化为二进制(不用逆置),如果为1,则相乘

    7:a0a1a2   即1+2+4

    6:a1a2      即2+4

    5:a0a2      即1+4

    4:a2         即4

    3:a0a1     即1+2

    2:a1        即2

    1:a0        即1

    0:1

    可以看出,对应为:

    a3   a2   a1   a0

    8     4     2     1

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<string.h>
     4 using namespace std;
     5 
     6 #define maxn 105
     7 
     8 int a[maxn],pos[maxn];
     9 
    10 int main()
    11 {
    12     int t,n,i,j,q,ans;
    13     long long p;//因为0 <= p <= 1234567898765432
    14     scanf("%d",&t);
    15     while(t--)
    16     {
    17         scanf("%d",&n);
    18         memset(a,0,sizeof(a));//这个很妙,比如n=3,则p>=8以后都要=0,就靠这一句
    19         for(i=0;i<n;i++)
    20         {
    21             scanf("%d",&a[i]);
    22         }
    23         scanf("%d",&q);
    24         while(q--)
    25         {
    26             scanf("%lld",&p);
    27             if(p==0)
    28             {
    29                 printf("1
    ");//别忘了
    30                 continue;
    31             }
    32             memset(pos,0,sizeof(pos));
    33             i=0;
    34             while(p)
    35             {
    36                 pos[i++]=p%2;//求p转化为二进制
    37                 p/=2;
    38             }
    39             ans=1;
    40             for(j=0;j<i;j++)
    41             {
    42                 if(pos[j])//如果那一位二进制=1
    43                 {
    44                     ans=ans*a[j]%2012;//则就是那几位相乘,一边乘一遍取余2012
    45                 }
    46             }
    47              printf("%d
    ",ans);
    48         }
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    tp5 查询问题 字段自增 字段比较
    七牛云 {"error":"no such domain"}
    mac 命令
    跟微信公众号一起来学api安全
    vue 运行别人项目
    php sha1withrsa
    thinkphp5 使用路由下分页 form表单 搜索
    P2134 百日旅行 (斜率优化,DP)
    [USACO Section 4.4]追查坏牛奶Pollutant Control (最小割)
    [HAOI2007] 理想的正方形 (单调队列)
  • 原文地址:https://www.cnblogs.com/youdiankun/p/3695099.html
Copyright © 2020-2023  润新知