• CSL 的神奇序列(猜猜猜?)


    链接:https://ac.nowcoder.com/acm/contest/551/F
    来源:牛客网

    时间限制:C/C++ 2秒,其他语言4秒
    空间限制:C/C++ 524288K,其他语言1048576K
    64bit IO Format: %lld

    题目描述

    CSL 有一个神奇的无穷实数序列,他的每一项满足如下关系:

    对于任意的正整数 n ,有 nk=0akank=w^2 , 并且 a0=w

    CSL 很清楚这样的序列是唯一的,他现在想考考你,你能快速告诉他这个序列的第 n 项是多少吗?

    为了不让你感到难过,对每次询问你只要输出 2nn!2nn! 倍的 anan 对 998244353 取模后的结果即可。

    输入描述:

    第一行有两个整数 w 和 q ,其中 w 的含义如题意所述, q 表示接下来的询问次数。

    接下来的 q 行,每行输入一个数 n 。
     
    1w,n1061≤w,n≤106
    1q1051≤q≤105

    输出描述:

    对于每一次询问, 在一行输出一个整数 v ,表示 v=2nn!anmod 998244353v=2nn!⋅anmod 998244353
    示例1

    输入

    1 2
    1
    2

    输出

    1
    3

    思路:看到题目有个2^n* n! * an 这种不常见的东西,猜测an跟2^n*n!有关
       样例中w=1时,打表发现当n=1时,an = a1 = 1/2,当n=2时,an = a2 = 3/8,首先猜了一发a_n = (2*n-1)/pow(2,2n-1)。打表后得到第四项代入发现等式并不成立。
    然后再猜了一下a_n = k/(2^n * n!)。。代入后发现这k就是个等比数列的乘积,即k = 1*3*5*....*(2n-1);
       然后v就是k了,因为分母给消掉了。最后别忘了,在最开始的时候乘上w。
    感受:做成了打表找规律题海星,等题解的一手正解。
    代码:
    #include<bits/stdc++.h> 
    using namespace std;
    #define LL long long
    #define INF 2000000000
    const LL mod = 998244353;
    LL d[1000001];
    void init(LL w){
        d[1] = w;
        for(int i = 2 ; i <= 1000000; i ++){
            d[i] = (d[i-1] * (2*i-1))%mod;
        }
    }
    int main()
    {
        LL w,q;
        cin>>w>>q;
        init(w);
        while(q--){
            LL n;
            cin >> n;
            cout<<d[n]<<endl;
        }
    }
  • 相关阅读:
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    python嵌套列表知多少
    旋转图像
  • 原文地址:https://www.cnblogs.com/Esquecer/p/10632046.html
Copyright © 2020-2023  润新知