一两眼题(oneortwo)

题目描述

给出n个整数,依次为a1,a2,...an。n<=50000.

你要进行K次操作,0 <= k < =1,414,213,562

每次操作你算出sum=a1+a2+a3+...an,再将每个数替换为sum-ai.

求最后一次操作后a1,a2,....an的值

输入

第一行两个整数n,k

接下来n行每行一个整数ai.

输出

输出n行。依次为k次操作后的a1,a2....an。模 98,765,431

样例输入

3 4
1
0
4

样例输出

26
25
29

提示

40%的数据满足n<=20,k<=2000


solution

通过手模发现

对于第i轮操作

正负由i的奇偶性决定

等比数列求和一下,就是快速幂了

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 50005
#define mod 98765431
using namespace std;
int n;
long long s[maxn],sum;
long long k;
long long lian(long long k,long long num)
{
long long ans=1,p=k;
while(num>0){
if(num&1)ans=ans*p;
p=p*p;p%=mod;ans%=mod;num>>=1;
}
return ans;
}
int main()
{
freopen("oneortwo.in","r",stdin);
freopen("oneortwo.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++){
scanf("%lld",&s[i]);
sum+=s[i];sum%=mod;
}
long long ny=lian(n,mod-2);
long long a=n-1;
long long tmp=lian(a,k);
if(k&1)tmp++;else tmp--;
long long ans=tmp*ny;ans%=mod;
ans=ans*sum;ans%=mod;
int op;
if(k&1)op=-1;else op=1;
for(int i=1;i<=n;i++){
long long t=ans+s[i]*op;
t=(t%mod+mod)%mod;
printf("%lld\n",t);
}
return 0;
}

最新文章

  1. Ueditor上传图片后自定义样式类名
  2. 递归O(NlgN)求解逆序数
  3. SQL Server死锁
  4. 为学Linux 我看了这些书
  5. 尾数为0零BigDecimal不能装成正常数
  6. 服务器部署_linux下部署jprofiler简单备忘
  7. DotNet Core 之旅(一)
  8. 配置.NET程序使用代理进行HTTP请求
  9. NoSQL简要数据库
  10. .net Mvc文件下载的功能,大文件下载完成之后修改数据库功能
  11. 基于python的知乎开源爬虫 zhihu_oauth使用介绍
  12. AJAX跨域问题解决方法(3)——被调用方解决跨域
  13. 编译原理 #01# 简易词法分析器(js实现)
  14. 一个极其简易版的vue.js实现
  15. mybatis框架之foreach标签
  16. DDD领域模型查询方法实现(八)
  17. element UI 导航栏根据路径来确定默认选中
  18. 基于folly的AtomicIntrusiveLinkedList无锁队列进行简单封装的多生产多消费模型
  19. vitas高音
  20. MySQL Study之--MySQL普通用户无法本地登陆

热门文章

  1. CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第九节
  2. C语言字符,字符串,字节操作常用函数
  3. Oracle Hint 之 Append
  4. Java如何将十六进制数转换为十进制数的自编程序
  5. ios swift 里面关于变量 常量 可选类型 控制流的一些心得
  6. nodejs 实现图片上传
  7. python 输入英语单词,查看汉语意思
  8. 二十、Mysql 连接的使用
  9. 【CodeBase】通过层级键在多维数组中获取目标值
  10. I Like for You to Be Still【我会一直喜欢你】