1 条题解
-
-1
首先我们打表发现具有周期性,在2,1,2,1间来回变动,具体为
$$2^i(\pmod 3)= \begin{cases} 2 & i为奇数\\ 1 & i为偶数 \end{cases} $$所以第场比赛的贡献值也能够根据奇偶性表达出来
$$w_i= \begin{cases} \frac{2^i-2}{3} & i为奇数\\ \frac{2^i-1}{3} & i为偶数 \end{cases} $$然后我们对这一坨式子做一个前缀和,那么有人问了:主播主播,怎么求,很简单,先求为偶数的情况
$$S_n=\sum_{i=1}^{\frac{n}{2}}(w_\text{2i-1}+w_\text{2i}) =\sum_{i=1}^{\frac{n}{2}}(2^\text{2i-1}-1)=\frac{2}{3}(2^n-1)-\frac{n}{2}\text{(PS:主播懒得写过程,自己推去,不会去问数学老师)} $$那为奇数呢,秒了,最后答案等于
#include<bits/stdc++.h> using namespace std; #define ll long long const ll mod=1e9+7; ll qmi(ll a,ll b){ ll ans=1; while(b){ if(b&1)ans=ans*a%mod; a=a*a%mod,b>>=1; } return ans; } ll get(ll n){ if(n&1){ return (get(n-1)+(qmi(2,n)-2+mod)%mod*qmi(3,mod-2)%mod)%mod; } return (2*qmi(2,n)%mod*qmi(3,mod-2)%mod-2*qmi(3,mod-2)%mod-n%mod*qmi(2,mod-2)%mod+mod+mod)%mod; } int main(){ ll l,r; scanf("%lld%lld",&l,&r); printf("%lld\n",(get(r)-get(l-1)+mod)%mod); return 0; }
- 1
信息
- ID
- 276
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 37
- 已通过
- 4
- 上传者