题目链接:http://codeforces.com/problemset/problem/963/A

题目大意:就是给了你n,a,b和一段长度为k的只有'+'和‘-’字符串,保证n+1被k整除,让你你计算

解题思路:

暴力肯定超时的,我们可以先计算出0~k-1这一段的值,当做a1,可以发现如果把每段长度为k的段的值当做一个元素,他们之间是成等比的,比值q=(b/a)^k,

然后就直接用等比数列求和公式求出答案即可。昨天把q当成b/a了,我的脑子啊。。。

注意,判断q==1时不能通过判断a==b,而是判断(a/b)^k==1来实现。

代码:

 #include<cstdio>
#include<cmath>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<string>
#define lc(a) (a<<1)
#define rc(a) (a<<1|1)
#define MID(a,b) ((a+b)>>1)
#define fin(name) freopen(name,"r",stdin)
#define fout(name) freopen(name,"w",stdout)
#define clr(arr,val) memset(arr,val,sizeof(arr))
#define _for(i,start,end) for(int i=start;i<=end;i++)
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
typedef long long LL;
const LL MOD=1e9+;
const double eps=1e-; string str; LL fpow(LL x,LL n){
LL res=;
while(n>){
if(n&) res=res*x%MOD; //如果二进制最低位为1,则乘上x^(2^i)
x=x*x%MOD; //将x平方并取模
n>>=;
}
return (res%MOD+MOD)%MOD;
} LL extend_gcd(LL a,LL b,LL &x,LL &y){
if(!b){
x=;
y=;
return a;
}
LL gcd=extend_gcd(b,a%b,x,y);
LL t=x;
x=y;
y=t-(a/b)*x;
return gcd;
} LL NY(LL num){
LL x,y;
extend_gcd(num,MOD,x,y);
return (x%MOD+MOD)%MOD;
} int main(){
FAST_IO;
LL n,a,b,k;
cin>>n>>a>>b>>k;
cin>>str;
LL len=(n+)/k;
LL sum=;
for(int i=;i<k;i++){
if(str[i]=='+')
sum=((sum+fpow(a,n-i)*fpow(b,i))%MOD+MOD)%MOD;
else
sum=((sum-fpow(a,n-i)*fpow(b,i))%MOD+MOD)%MOD;
}
LL ans;
//注意,比值q是(b/a)^k而不是(b/a)
LL q=fpow(NY(a),k)*fpow(b,k)%MOD;
if(q!=){
LL _q=NY(q-);
ans=(sum*(fpow(q,len)-)%MOD*_q%MOD+MOD)%MOD;
}
else
ans=sum*len%MOD;
cout<<ans<<endl;
return ;
}

Codeforces 963A Alternating Sum(等比数列求和+逆元+快速幂)的更多相关文章

  1. codeforces 963A Alternating Sum

    codeforces 963A Alternating Sum 题解 计算前 \(k\) 项的和,每 \(k\) 项的和是一个长度为 \((n+1)/k\) ,公比为 \((a^{-1}b)^k\) ...

  2. 2019河北省大学生程序设计竞赛(重现赛)B 题 -Icebound and Sequence ( 等比数列求和的快速幂取模)

    题目链接:https://ac.nowcoder.com/acm/contest/903/B 题意: 给你 q,n,p,求 q1+q2+...+qn 的和 模 p. 思路:一开始不会做,后面查了下发现 ...

  3. CodeForces - 598A Tricky Sum (数学,快速幂的运用)

    传送门: http://codeforces.com/problemset/problem/598/A A. Tricky Sum time limit per test 1 second memor ...

  4. Codeforces 963E Alternating Sum 等比数列+逆元

    题目大意: 看一下样例就明白了 基本思路: 题目中明确提到k为一个周期,稍作思考,把k项看作一项,然后发现这是个等比数列,q=(b/a)^k, 然后重点就是怎样处理等比数列求和表达式中的除法,这个时候 ...

  5. CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模

    很久以前做过此类问题..就因为太久了..这题想了很久想不出..卡在推出等比的求和公式,有除法运算,无法快速幂取模... 看到了 http://blog.csdn.net/yangshuolll/art ...

  6. Codeforces 963A Alternating Sum ( 思维 && 数论 )

    题意 : 题目链接 分析 : Tutorial 讲的很清楚 至于为什么这样去考虑 算是一个经验问题吧 如果一个问题要你给出模意义下的答案 就多考虑一下答案是要用逆元构造出来 也就说明有除法的存在 那么 ...

  7. 牛客网 牛客小白月赛1 I.あなたの蛙が帰っています-卡特兰数,组合数阶乘逆元快速幂

    I.あなたの蛙が帰っています   链接:https://www.nowcoder.com/acm/contest/85/I来源:牛客网     这个题有点意思,是卡特兰数,自行百度就可以.卡特兰数用处 ...

  8. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)

    先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...

  9. Codeforces 964C Alternating Sum

    Alternating Sum 题意很简单 就是对一个数列求和. 题解:如果不考虑符号 每一项都是前一项的 (b/a)倍, 然后考虑到符号的话, 符号k次一循环, 那么 下一个同一符号的位置 就是 这 ...

随机推荐

  1. 解题:HEOI 2016 求和

    题面 我们需要知道这样一个东西(大概叫 斯特林公式?) $S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^k C_j^k(j-k)^i$ 那么就是推啊 $=\ ...

  2. PHP 压缩图片质量

    $imageFileName = './test2.jpg';$uploadfile_resize = $imageFileName;$pic_width_max = 1000;$pic_height ...

  3. chrome神插件之:SwitchyOmega的安装设置

    转至:http://yiweifen.com/v-1-118586.html 前言 往常找某草的网站基本上是这样的:先FQ,然后谷歌找1024,出现很多某草的更新地址,大多都是广告,大约需要花十几分钟 ...

  4. 【Asp.net入门3-04】使用jQuery-使用jQuery事件

  5. python中__init__()、__new__()、__call__()、__del__()用法

    关于__new__()的用法参考: http://www.myhack58.com/Article/68/2014/48183.htm 正文: 一.__new__()的用法: __new__()是在新 ...

  6. python---协程理解

    推文:python---基础知识回顾(七)迭代器和生成器 推文:Python协程深入理解(本文转载于该文章) 从语法上来看,协程和生成器类似,都是定义体中包含yield关键字的函数.yield在协程中 ...

  7. MAC 下用 Common Lisp 调试 OpenGL 程序

    MAC 下用 Common Lisp 调试 OpenGL 程序 环境搭建 运行环境: OSX 10.11.3 EI Capitan Common Lisp: SBCL 使用 SBCL, 首先要安装这几 ...

  8. Java并发编程原理与实战十三:JDK提供的原子类原理与使用

    原子更新基本类型 原子更新数组 原子更新抽象类型 原子更新字段 原子更新基本类型:   package com.roocon.thread.t8; import java.util.concurren ...

  9. OpenCV3.4.1+vs2017安装及配置

    一.OpenCV3.4.1下载与安装 1.OpenCV3.4.1下载 可以去OpenCV官网上下载http://opencv.org/ 然后找到对应的系统环境就可以下载了,当然了官网上下载会很慢,推荐 ...

  10. css3 加载动画效果

    Loading 动画效果一           HTML 代码: <div class="spinner"> <div class="rect1&quo ...