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
  • 相关阅读:
    Browse information of one or more files is not available解决办法
    python中装饰器的使用
    python:匿名函数lambda
    python:列表生成式的学习
    python:列表切片知识的总结
    python:*args和**kwargs的用法
    NAT
    ACL
    三层交换技术和HSRP协议
    单臂路由与DHCP中继
  • 原文地址:https://www.cnblogs.com/DriverLao/p/9414824.html
Copyright © 2011-2022 走看看