[codeforces round#475 div2 ][C Alternating Sum ]
http://codeforces.com/contest/964/problem/C
题目大意:给出一个等比序列求和并且mod 1e9+9.
题目分析:等比数列的前n项和公式通过等公比错位相减法可以得到是Sn=A1*(q^n-1)/(q-1).这里注意q不能等于1.
坑点:而本题的q=(b/a)^k,由于a,b,k的数据范围也很大,所以需要求逆元来进行除法取模,而这个过程会出现b/a原本不等于1,而在求逆元取模之后的结果为1,所以不光要判断一下b/a的结果是否等于1,还要判断一下b*mypow(a,mod-2)%mod的结果是否等于1. 被这个坑卡了一个小时..orz
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
typedef long long ll;
char ch[];
const ll mod=1e9+;
ll mypow(ll x,ll y){
ll ans=;
while(y){
if(y&)ans=(ans%mod)*(x%mod)%mod;
x=(x%mod)*(x%mod)%mod;
y/=;
}
return ans%mod;
}
int main(){
ll n,a,b,k;
cin>>n>>a>>b>>k;
scanf("%s",ch);
ll sum=;
ll bb=;
ll p=(mypow(a,n))%mod;
for(int i=;i<k;i++)
{
if(ch[i]=='+')
{
sum=(sum+p)%mod;
}
else
sum=(sum-p+mod)%mod;
p=(p*b)%mod;
p=(p*mypow(a,mod-))%mod;
}
ll ans=sum;
if(a==b){
sum=(sum%mod)*(((n+)/k)%mod)%mod;
}
else{
ll ad1=mypow(b,k)%mod;
ll ad2=mypow(a,k)%mod;
ll ss=mypow(ad2,mod-)%mod;
ss=(ss*ad1)%mod;
if(ss==){
ll ans=(sum*(n+)/k)%mod;
cout<<ans<<endl;
return ;
}
ll c1=mypow(ss,(n+)/k)%mod;
ll c2=(c1-+mod)%mod;
sum=((sum)*c2)%mod;
sum=(sum*mypow((ss-+mod)%mod,mod-))%mod;
}
cout << (sum+mod)%mod<<endl;
return ;
}
[codeforces round#475 div2 ][C Alternating Sum ]的更多相关文章
- Codeforces Round #539 div2
Codeforces Round #539 div2 abstract I 离散化三连 sort(pos.begin(), pos.end()); pos.erase(unique(pos.begin ...
- Codeforces Round #564(div2)
Codeforces Round #564(div2) 本来以为是送分场,结果成了送命场. 菜是原罪 A SB题,上来读不懂题就交WA了一发,代码就不粘了 B 简单构造 很明显,\(n*n\)的矩阵可 ...
- 【前行】◇第3站◇ Codeforces Round #512 Div2
[第3站]Codeforces Round #512 Div2 第三题莫名卡半天……一堆细节没处理,改一个发现还有一个……然后就炸了,罚了一啪啦时间 Rating又掉了……但是没什么,比上一次好多了: ...
- Codeforces Round#320 Div2 解题报告
Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...
- Codeforces Round #361 div2
ProblemA(Codeforces Round 689A): 题意: 给一个手势, 问这个手势是否是唯一. 思路: 暴力, 模拟将这个手势上下左右移动一次看是否还在键盘上即可. 代码: #incl ...
- Codeforces Round #475 Div. 2 A B C D
A - Splits 题意 将一个正整数拆分成若干个正整数的和,从大到小排下来,与第一个数字相同的数字的个数为这个拆分的权重. 问\(n\)的所有拆分的不同权重可能个数. 思路 全拆成1,然后每次将2 ...
- Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 2)
A. Splits time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...
- Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1)
A. Alternating Sum 就是个等比数列,特判公比为 $1$ 的情况即可. #include <bits/stdc++.h> using namespace std; ; ; ...
- Codeforces Round #626 Div2 D,E
比赛链接: Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) D.Present 题意: 给定大 ...
随机推荐
- Win10系列:UWP界面布局基础12
画刷 画刷(Brush)用于为图形元素填充颜色.在XAML中,画刷有许多属性,其中较常使用的是Fill属性和Stroke属性,Fill用于填充图形的背景色,而Stroke用于设置图形的线条颜色. 在实 ...
- sql2008r2安装失败的解决办法
setup fails with: '.', hexadecimal value 0x00, is an invalid character.SQL 2012 Setup issues - hexad ...
- Android知识补充(Android学习笔记)
Android知识补充 ●国际化 所谓的国际化,就是指软件在开发时就应该具备支持多种语言和地区的功能,也就是说开发的软件能同时应对不同国家和地区的用户访问,并针对不同国家和地区的用户,提供相应的.符合 ...
- 5.4 C++重载输入与输出操作符
参考:http://www.weixueyuan.net/view/6382.html 总结: 在C++中,系统已经对左移操作符“<<”和右移操作符“>>”分别进行了重载,使其 ...
- 2.8 C++参数初始化表
参考:http://www.weixueyuan.net/view/6340.html 总结: 参数初始化表可以为任何数据成员进行初始化. 初始化const成员变量的唯一方法只有利用参数初始化表. 通 ...
- SQL-2 查找入职员工时间排名倒数第三的员工所有信息
题目描述 查找入职员工时间排名倒数第三的员工所有信息CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT ...
- JavaScript 基础,登录前端验证
<script></script>的三种用法: 放在<body>中 放在<head>中 放在外部JS文件 <!DOCTYPE html> & ...
- python笔记1-基础概念、python安装使用配置
Python 1.基础概念 一.什么是python? python是一种面向对象.解释型的计算机语言,它的特点是语法简洁.优雅.简单易学.在1989诞生,Guido(龟叔)开发.这里的python并不 ...
- Java流对象理解
马士兵老师,曾在Java的学习过程中,将Java的流比作管道,认为很贴切,在此笔者也建议读者在学习过程中作类似比喻,形象化的学习 Java根据数据流向的不同分为输入流和输出流: Java根据处理数据类 ...
- java.lang.ClassCastException: android.os.BinderProxy cannot be cast to com.test.Test
由于我在第二个Activity中指定了进程名字,但是服务却没有指定进程名(默认跟主入口一个进程)所以报错. 网上找到的是 服务 和绑定服务的客户端必须在同一个application或者进程中,所以Ma ...