zoukankan      html  css  js  c++  java
  • 10.23T1 杨辉三角

    #3846 陷阱

    描述

    Jerryzhong 被 ljr 狠狠地嘲讽了一番,于是他想搞点事情。他制作了 n 个陷阱,每个陷阱的伤害值为 s[i],这 n 个陷阱十分神奇,它们的伤害值能不断提高,由于不可抗力的原因,Jerryzhong 制作这 n 个陷阱时将它们连在了一起,所以它们是有序且伤害值是一起提升的。

    Jerryzhong 总共能使陷阱提高 x 次伤害,他想知道提高伤害 x 次后陷阱 y 的伤害值 s[y],由于 Jerryzhong 不会数数而且忙着追番,因此他将这个问题交给了身为 dalao 的你。

    每提高一次伤害:将所有陷阱的伤害值 s[i]变为 s[i]+s[i%n+1]。

    例如陷阱 1 7 4,提高一次伤害后变为 8 11 5,再提高一次伤害后变为 19 16 13

    输入

    第一行包含一个整数 n 表示陷阱个数。

    接下来一行 n 个整数表示这 n 个陷阱的伤害值。

    接下来一行一个整数 q 表示询问次数。

    接下来 q 行,每行两个整数 x,y 意义如题所述

    输出

    如果你能做到则输出 yes,否则输出 no。

    输出一共 q 行,表示每次询问的答案,由于答案可能很大,请对 998244353 取模。

    样例输入[复制]
    5
    1 2 3 4 5
    2
    1 2
    2 2
    样例输出[复制]
    5
    12
    提示

    对于 30% 的数据,1<=n,x,q<=100。

    对于 50% 的数据,1<=n<=100000,1<=x<=500,1<=q<=100。

    对于 100% 的数据,1<=n<=1000000,1<=ai<=1e9,1<=x<=2000,1<=q<=10000。

    标签
    ZYH
     
     
     
    我们推一下显然发现系数是满足杨辉三角的,如果x超出n怎么办?超出部分循环加上前面的数就可以了
    例如1 3 3 1超出3个,那么把最后一个1加在第一个上面就可以了,变成2 3 3
    (此代码打的分段)
    code:
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<string>
     4 #define N 1000006
     5 using namespace std;
     6 const long long mod=998244353;
     7 long long read() {
     8     long long x=0,f=1;
     9     char c=getchar();
    10     while(!isdigit(c)) {
    11         if(c=='-')f=-1;
    12         c=getchar();
    13     }
    14     while(isdigit(c)) {
    15         x=(x<<3)+(x<<1)+c-'0';
    16         c=getchar();
    17     }
    18     return x*f;
    19 }
    20 long long n,sum;
    21 long long a[N][2],b[N],fac[N],inv[N];
    22 long long ksm(long long a,long long b) {
    23     long long ans=1;
    24     for(; b; b>>=1) {
    25         if(b&1) {
    26             ans*=a;
    27             ans%=mod;
    28         }
    29         a*=a;
    30         a%=mod;
    31     }
    32     return ans;
    33 }
    34 void pre() {
    35     fac[0]=1;
    36     for(long long i=1; i<=5000; i++)fac[i]=(fac[i-1]*i)%mod;
    37     inv[5000]=ksm(fac[5000],mod-2);
    38     for(long long i=4999; i>=0; i--)inv[i]=(inv[i+1]*(i+1))%mod;
    39 }
    40 long long C(long long m,long long n) {
    41     return ((fac[m]*inv[n]%mod)*inv[m-n])%mod;
    42 }
    43 int c[N];
    44 int main() {
    45     freopen("trap.in","r",stdin);
    46     freopen("trap.out","w",stdout);
    47     n=read();
    48     for(long long i=1; i<=n; i++)a[i][0]=read(),sum+=a[i][0];
    49     long long q;
    50     pre();
    51     q=read();
    52     for(long long i=1; i<=n; i++)b[i]=a[i][0];
    53     if(n<=100) {
    54         long long now=0;
    55         while(q--) {
    56             long long x,y;
    57             x=read(),y=read();
    58             now=0;
    59             for(long long i=1; i<=x; i++) {
    60                 for(long long j=1; j<=n; j++) {
    61                     a[j][now^1]=a[j][now]+a[j%n+1][now];
    62                     a[j][now^1]%=mod;
    63                 }
    64                 now^=1;
    65             }
    66             cout<<a[y][now]<<'
    ';
    67             for(long long i=1; i<=n; i++)a[i][0]=b[i];
    68         }
    69         return 0;
    70     }
    71     //cout<<C(5,1)<<"---";
    72     while(q--) {
    73         int x,y;
    74         x=read(),y=read();
    75         long long ans=0;
    76         for(int i=0; i<=x; i++) {
    77             ans+=(C(x,i)*b[(y+i-1)%n+1])%mod;
    78             ans%=mod;
    79         }
    80         cout<<ans<<'
    ';
    81     }
    82     return 0;
    83 }

    over

     
  • 相关阅读:
    关于Maya Viewport 2.0 API 开发的介绍视频
    春节大假
    Some tips about the life cycle of Maya thread pool
    Can I compile and run Dx11Shader for Maya 2015 on my side?
    How to get current deformed vertex positions in MoBu?
    想加入全球首届的 欧特克云加速计划吗?
    三本毕业(非科班),四次阿里巴巴面试,终拿 offer(大厂面经)
    mac、window版编辑器 webstorm 2016... 永久破解方法。
    node 搭载本地代理,处理web本地开发跨域问题
    js 一维数组,转成嵌套数组
  • 原文地址:https://www.cnblogs.com/saionjisekai/p/9838284.html
Copyright © 2011-2022 走看看