Alternating Sum

题目传送门

思路:这道题呀,需要涉及到两个数学知识,一是逆元,二是等比数列求和公式。

一:逆元

我们知道 mod 这个东西在题目中时常出现,他可以用于加法,减法,乘法,然而,对于除法,它就不符合了,假定x是a的逆元值,那么b/a%c=b*x%c,就把除法转换成乘法,从而可以运用同余定理,防止计算中的数爆炸,是不是非常的没有用 ,嗯~~~~。

那么怎么求出a的逆元值呢,根据费马小定理,(有兴趣可以证明一下哈),因为小编也没怎么看懂,所以直入主题,简单来说就是b/a % c=b* a ( c − 2 ) a^{(c-2)} a(c−2) %c。(前提c是素数)

二:等比数列求和公式

这个高中会学,也比较简单,在小编的范围之内,还是给大家推导一下吧。
假设有个a数列为等比公式,也就是满足ai-1*q=ai (q为公比)

S n = a 1 + a 2 . . . . . + a n Sn=a_1+a_2.....+a_n Sn=a1​+a2​.....+an​
Sn * q-Sn=a1 *q+a2 * q…+an * q-a1-a2-a3…-an
Sn * q-Sn=a1 *q+a2 * q…+an * q-a1-a1 * q-a2 * q…-an-1 * q
Sn(q-1)=an * q-a1
Sn(q-1)=a(n+1)-a1
Sn(q-1)=a1 * q^n-a1
Sn=a1(q^n-1)/(q-1)
当然,也可以这样写:Sn=a1(1-q^n)/(1-q)

知识搞定了,那么我们就可以做题了。
大家先看看题目,就会发现S数列长度是k的倍数。
那么我们可以知道S=S1,S2,S3,…,Sk+(S1+…+Sn)。
那么每一个值用下面这个式子来求和
现在我们可以看出对于ai和ai+k来说,他们存在着一定关系
那么带入下面这个式子 Si*A^(n-i)*B ^i
自己推导一下q就为(b/a)^k

有这些那不就加上个疯狂mod不就大功造成了吗?
上代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#define N 100001
#define ll long long
using namespace std;
const ll mod=1e9+9;
ll pow1(ll x, ll y){while(x<0)x+=mod;ll ret=1;while(y){if(y&1)(ret*=x)%=mod;(x*=x)%=mod,y>>=1;}return ret;
}
ll n,a,b,k;
char f;
ll s,sum,a1,q,zs;
int main()
{scanf("%lld%lld%lld%lld\n",&n,&a,&b,&k);for(int i=0;i<k;i++){scanf("%1c",&f);if(f=='+') s=1;else s=mod-1;a1=((s%mod*pow1(a,n-i)%mod)%mod*pow1(b,i)%mod)%mod;q=pow1(b*pow1(a,mod-2)%mod,k)%mod;zs=(n+1)/k;if(q==1) sum=(sum+a1*zs%mod)%mod;else sum=(sum+a1*(pow1(q,zs)-1)%mod*pow1(q-1,mod-2)%mod)%mod;}printf("%lld",sum);return 0;
}

如有不足之处,请多谅解,小编尽力改进。

CF963A Alternating Sum相关推荐

  1. Codeforces 963A Alternating Sum 【数论+数学】

    官方题解这个样子我觉得说得比较清楚.Z我们可以朴素的预处理出来(注意乘法膜),q的话考点在于[分数取膜]即 (a/b)%P = a* inverse of b %P 这就涉及到算b的逆元,我用的是欧几 ...

  2. Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 2) C.Alternating Sum(等比数列求和)

    题目链接;点击打开链接 题目大意:给出一个数列s,其中的元素为s1,s2,s3......sn.元素要么是1(用'+'表示),要么是-1(用'-'表示) 这个数列以k个数为一个周期,且n能被k整除. ...

  3. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》

    虽然2012年出版的老书了,但是是由三次世界冠军的上海交大ACM队出版的书籍,选择的题目是ACM经典中的经典,书中有非常详细的题解,可以学到很多东西,值得一刷. 目录 第一部分 第一章 数学 1.1 ...

  4. 基于属性的测试,hypothesis以及查找bug

    基于属性的测试 我慢慢滴慢慢滴学习到hypothesis是多么的聪明,但在一个非常基础的水平上,它允许你做的是,使用一个测试,以及测试参数的整个范围来取代测试一个单一的例子. 这里是一个简单的例子,基 ...

  5. An Introduction to K-theory

    An Introduction to K-theory Eric M. Friedlander∗ Department of Mathematics, Northwestern University, ...

  6. Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 2)

    题目链接 A. Splits (水题) 题意:总结起来就是给出一个n,问你能把它拆分成多少种下面的weight,下面样例更好理解 Eg: n=8    =>  ans=5 Note:weight ...

  7. Weighted Sum Power Maximization for Intelligent Reflecting Surface Aided SWIPT

    本文地址:https://arxiv.org/pdf/1907.05558.pdf Abstract 首先: SWIPT : simultaneous wireless information and ...

  8. Codeforces Round #636 (Div. 3) C.Alternating Subsequence

    Codeforces Round #636 (Div. 3) C.Alternating Subsequence 题目链接 Recall that the sequence b is a a subs ...

  9. go build 编译报错 missing go.sum entry for module providing package

    go build 编译报错 missing go.sum entry for module providing package 解决方法 // 移除未使用的依赖 go mod tidy 再次编译,就可 ...

最新文章

  1. 计算机视觉与深度学习 | 基于Matlab提取SIFT特征点(源代码)
  2. ITK:创建一个图像区域
  3. 【cropper】限制图片大小
  4. Effective C++ 学习笔记(11)
  5. AngularJS之过滤器
  6. Snake Ladders bfs
  7. OpenCV 与 OpenGL 的关系是什么?
  8. 清华大学计算机系招生数量,清华大学报考信息出炉,计算机报考人数最多,有些专业无人报考...
  9. 重庆市总工会送法到中建三局城建档案馆项目
  10. Arduino ESP32深度睡眠触摸唤醒(触摸唤醒)
  11. php获得当前时间差,PHP获取当前时间差8小时的问题
  12. 遭遇win10激活问题
  13. 用户画像标签维度_用户画像详解:关于用户画像的What、Why、How
  14. Android adb的使用
  15. 使用ThinkJs搭建微信中控服务
  16. Linux中使用命令分类型统计系统光盘中rpm包数量
  17. 跻身全球前十,金山云欲用AIoT再破局
  18. nmn有哪些功效,nmn有什么功效,涨知识!
  19. Python习题十三套汇总
  20. 数据资源丨原始数据哪里找?这些网站要用好!(建议收藏)

热门文章

  1. 前端自动化构建工具--Plop
  2. android 随机云标签(圆形)
  3. ASP.NET与IIS
  4. 全球与中国电磁脉冲医疗设备市场深度研究分析报告
  5. jpeg分析工具——JPEGsnoop
  6. 塑造客户体验未来的趋势
  7. 如何设置html字体
  8. Squid代理服务器(透明代理服务配置、日志分析、反向代理、日志分析、ACL访问控制)
  9. 仿淘宝商品详情页面Android
  10. 详细完整——XP系统硬盘安装Ubuntu14.04