zoukankan      html  css  js  c++  java
  • 洛谷月赛2018.8 T1题解(U28036 Nagisa loves Tomoya)

    【题解】  

      我们设原来的数组为a1,a2,a3...,

      那么一次操作之后的数组变为a1+a2,a2+a3,a3+a4...,

      两次操作之后数组变为a1+2a2+a3,a2+2a3+a4,a3+2a4+a5...,

      三次操作之后数组变为a1+3a2+3a3+a4,a2+3a3+3a4+a5...,

      有没有发现什么?(n-1)次操作之后x位置的值就是ax,ax+1,ax+2,...,ax+n-1乘上各自的系数再相加,而系数就是杨辉三角的第n行

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #define LL unsigned long long
     5 #define Mod 998244353
     6 #define N 3000010
     7 #define M 2010
     8 #define rg register
     9 using namespace std;
    10 LL n,m,a[N],f[M][M];
    11 inline int read(){
    12     int k=0,f=1; char c=getchar();
    13     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
    14     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
    15     return k*f;
    16 }
    17 int main(){
    18     n=read();
    19     for(rg int i=1;i<=n;i++) a[i]=a[i+n]=read()%Mod;
    20     f[1][1]=1;
    21     for(rg int i=2;i<=M-5;i++)
    22         for(rg int j=1;j<=i;j++) f[i][j]=(f[i-1][j]+f[i-1][j-1])%Mod;
    23     m=read();
    24     while(m--){
    25         int x=read()+1,y=read(); LL ans=0;
    26         for(rg int i=y;i<=y+x-1;i++){
    27             int k=i-y+1;
    28             ans+=a[(i-1)%n+1]*f[x][k]%Mod; ans%=Mod;
    29         }
    30         printf("%lld
    ",ans%Mod);
    31     }
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    【原】 POJ 1012 Joseph 约瑟夫 解题报告
    【原】 POJ 1001 Exponentiation 大整数乘法 解题报告
    POJ——1517
    毕业了,校园里走走看看——华中科技大学
    毕业答辩后
    CV编程常用的获取鼠标圈定区域的方法
    送走了GB
    POJ——2546
    奥巴马在YY21#524
    POJ——3517
  • 原文地址:https://www.cnblogs.com/DriverLao/p/9414824.html
Copyright © 2011-2022 走看看