牛客训练赛25-找规律+变相前缀和+差分

最关键的是找前这个sum[i]=sum[i]*(n-1),然后发现每个新的序列差分都不变,求出差分

然后用这个公式维护a[1],用ans[i]代表翻i次的第一项是什么,然后奇偶分情况看是加差分还是减即可 

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#define ll long long
using namespace std;
const int mod = 1e9+7;
const int maxx=100005;
int n,m;
ll a[maxx];
ll s;
ll c[maxx];
ll ans[maxx];
int main(){
    int x,t;
   while(~scanf("%d%d",&n,&m)){
      memset(c,0,sizeof(c));
      memset(a,0,sizeof(a));
      s=0;
      for (int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
        s=(a[i]+s)%mod;
        c[i]=(a[i]-a[1]+mod)%mod;
      }
      ll pre=s;
      ans[0]=a[1];
      for (int i=1;i<=100001;i++){
          ans[i]=(pre-a[1]+2*mod)%mod;
          a[1]=ans[i];
          pre=pre*(n-1)%mod;
      }
      while(m--){
        scanf("%d%d",&x,&t);
        ll anss;
        if (t%2==0) anss=(ans[t]+c[x])%mod;
        else anss=(ans[t]-c[x]+mod)%mod;
        printf("%lld\n",anss);
      }

   }
  return 0;
}

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
10-12 10:48
已编辑
秋招之苟:邻居家老哥19届双2硕大厂开发offer拿遍了,前几天向他请教秋招,他给我看他当年的简历,0实习实验室项目技术栈跟开发基本不沾边😂,我跟他说这个放在现在中厂简历都过不了
点赞 评论 收藏
分享
牛客279957775号:铁暗恋
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务