优化题(3)

TimeLimit:7000MS  MemoryLimit:128000MB
64-bit integer IO format:%lld
未提交 | 登录后收藏
Problem Description
#include<stdio.h>
typedef long long ll;
ll f(ll a,ll b,ll MOD)
/*快速幂取模,可以在O(log(b))的复杂度下计算a^b%MOD*/
{
ll ans=1;
while(b){
if(b&1) ans=ans*a%MOD;
a=a*a%MOD;
b>>=1;
}
return ans;
}
ll nextrandom(ll y,ll MOD)
//随机数生成器,不用改
//之所以要随机数生成器,是因为后台没办法上传太大的文件
//产生的随机数是为了测试代码效率,所有产生的随机数在[1,10^18]内
{
y=y*y*MOD;
if(y&1LL<<63) y=~y+1;
return y%1000000000000000000LL+1;
}
int main()
{
//本地测试时注意long long类型在本地编译器的输入输出格式
//提交时请使用%lld输入和输出long long类型

ll x,q,y,MOD=1000000007LL,z,ans;
while(scanf("%lld",&x)!=EOF)//x<=10^9
{
scanf("%lld%lld",&q,&y);//q<=5000000,y<=10^18
ans=0;
while(q--)
{
ans = ( ans + f(x,y,MOD) ) % MOD;
y=nextrandom(y,MOD);//1<=y<=10^18
}
printf("%lld\n",ans);
}
return 0;
}
/*
*本代码的总时间复杂度是O(qlog(y))
*请优化到O(q)
*/

Input
Output
SampleInput
SampleOutput
Submit
题目统计信息详细
总AC数69
通过人数40
尝试人数46
总提交量143
AC率27.97%
AC该题后可以添加标签
贴完标签可以获得20ACB。
并且可以获得本题所有提交代码查看权限。
点击标题可以显示标签。
如果你还没认真思考过这题,请不要查看标签
如果您已经通过了该题,请务为该题贴上标签

T^T Online Judge

[BUG反馈] [FAQ] [闽ICP备17026590号-1]
当前版本:3.24 系统时间: