Codeforces #475 div2
题目链接:http://codeforces.com/contest/964
A题 答案n/2+1;
B题 讨论三种情况
c>b
c==b
c<b
C题
数论,逆元+快速幂,但是我一直卡在了取模这个地方。迷之wa
AC代码:
1 #include<iostream>
2 #include<algorithm>
3 #include<string.h>
4 #include<stdio.h>
5 #define ll long long
6 #define MOD 1000000009
7 using namespace std;
8 char s[100500];
9 ll quick_pow(ll a,ll b,ll n,ll x){
10 ll ans=1,base=a;
11 ll y=n-x;
12 while(y!=0){
13 if(y&1){
14 ans=(ans*base)%MOD;
15 }
16 base=(base*base)%MOD;
17 y>>=1;
18 }
19 base=b;
20 while(x!=0){
21 if(x&1){
22 ans=(ans*base)%MOD;
23 }
24 base=(base*base)%MOD;
25 x>>=1;
26 }
27 return ans%MOD;
28 }
29 ll qkm(ll a,ll y){
30 ll ans=1,base=a;
31 while(y!=0){
32 if(y&1){
33 ans=(ans*base)%MOD;
34 }
35 base=(base*base)%MOD;
36 y>>=1;
37 }
38 return ans%MOD;
39 }
40 int main(){
41 ll n,a,b,k;
42 cin>>n>>a>>b>>k;
43 scanf("%s",s);
44 ll ans=0;
45 /*for(ll i=0;i<k;i++){
46 if(s[i]=='+'){
47 ans=(ans+quick_pow(a,b,n,i))%MOD;
48 }else{
49 ans=(ans-quick_pow(a,b,n,i))%MOD;
50 }
51 }*/
52 for (ll i=0;i<k;i++)
53 {
54 if(s[i]=='+')
55 {
56 ans= (ans+qkm(a,n-i)*qkm(b,i)%MOD+MOD)%MOD;
57 }
58 if(s[i]=='-')
59 {
60 ans= (ans-qkm(a,n-i)*qkm(b,i)%MOD+MOD)%MOD;
61 }
62 }
63 ll cir=(n+1)/k;
64 //ll inva=qkm(a,MOD-2);
65 ll q=(qkm(b,k)*qkm(a,k*(MOD-2)))%MOD;
66 if(q!=1){
67 ans=ans*(qkm(q,cir)-1)%MOD*(qkm(q-1,MOD-2))%MOD; //这里,如果我先对后面两个取模就会wa,错在第7组测试数据,迷~
68 }else{
69 ans=(cir*ans)%MOD;
70 }
71 cout<<ans<<endl;
72 return 0;
73 }