Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
貌似这样的算法过不了In Reply To:rejudge到崩溃了~~~~~~谁帮个忙? Posted by:star6 at 2007-07-21 14:58:28 > #include<cstdio> > #include<algorithm> > #include<cmath> > #include<algorithm> > #include<vector> > #include<utility> > > __int64 x,y,z,k,base; > std::vector<std::pair<int,int> > q; > > void init() > { > int i; > __int64 t; > > > scanf("%I64d %I64d %I64d\n",&x,&z,&k); > if ((!x)&&(!z)&&(!k)) > exit(0); > k=(k%z+z)%z; > > base=(int)sqrt(z)+1; > q.clear(); > > t=1; > for (i=0;i<base;i++) > { > q.push_back(std::make_pair(t,i)); > t=(t*x)%z; > } > > std::sort(q.begin(),q.end()); > } > > __int64 mod_exp(__int64 a,__int64 b,__int64 n) > { > __int64 d; > > d=1; > while ((b>0)&&(a!=1)) > { > if (b&1) d=(d*a)%n; > b=b>>1; > a=(a*a)%n; > } > return (d); > } > > void ext_gcd(__int64 a,__int64 b,__int64 &x,__int64 &y,__int64 &d) > { > __int64 tx,ty; > > if (b==0) > { > x=1; > y=0; > d=a; > return; > } > > ext_gcd(b,a%b,tx,ty,d); > x=ty; > y=tx-(a/b)*ty; > } > > int find(int p) > { > std::vector<std::pair<int,int> >::iterator t; > > t=std::lower_bound(q.begin(),q.end(),std::make_pair(p,-1)); > if ((t==q.end())||((*t).first!=p)) > return(base); > else > return((*t).second); > } > > bool starmain() > { > __int64 a,ty,tx,d,ttt,t; > > for (y=0;y<z;y+=base) > { > a=mod_exp(x,y,z); > ext_gcd(a,z,tx,ty,d); > if (k%d==0) > { > ttt=z/d; > tx=((tx*k/d)%ttt+ttt)%ttt; > > if ((t=find(tx))<base) > { > y+=t; > return(true); > } > } > } > > return(false); > } > > > int main() > { > // freopen("c:\\in.txt","r",stdin); > > while (true) > { > init(); > if (starmain()) > printf("%I64d\n",y); > else > printf("No Solution\n"); > } > > return(0); > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator