本来应该是发到 P5580 的,结果那里不知道为啥不能发帖子就发到这里来了:
#include "testlib.h"
#include<bits/stdc++.h>
typedef long long int ll;
using std::string;
using std::to_string;
inline ll mul(ll x,ll y,ll md)
{
ll res=0;
while(y)
{
if(y&1)
{
res=(res+x)%md;
}
x=(x+x)%md,y>>=1;
}
return res;
}
inline void fib(ll n,ll &x,ll &y,ll md)
{
ll u,v;
if(n==0||n==1)
{
return (void)(x=n,y=1);
}
if(n&1)
{
return (void)(fib(n-1,y,x,md),y=(y+x)%md);
}
fib(n>>1,u,v,md),y=(mul(u,u,md)+mul(v,v,md))%md;
x=(mul(u,v,md)+mul(u,v>u?v-u:v-u+md,md))%md;
}
inline ll fib(ll n,ll md)
{
ll x,y;
return fib(n,x,y,md),x;
}
int main(int argc,char* argv[])
{
registerTestlibCmd(argc,argv);
string in=inf.readString();
ll md=pow(10,in.length()),out=ouf.readLong(0,(ll)9e18);
ll res=fib(out,md);
while(in[0]=='0')
{
in.erase(0,1);
}
if(to_string(res)==in)
{
quitf(_ok,"zkdxl AK IOI!");
}
else
{
quitf(_wa,">_<");
}
}