| ||||||||||
| 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 | |||||||||
我要举报自己的程序,没过样例也AC了.......程序代码如下,请加强数据!
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<cmath>
using namespace std;
#include<fstream>
#include<algorithm>
typedef long long lld;
lld mul_mod(lld a,lld b,lld n)// a*b%n
{
lld res=0;
a=a%n,b=b%n;
while(b>0)
{
if(b&0x01)
res=(res+a)%n;
a=(a+a)%n;
b>>=1;
}
return res;
}
lld exp_mod(lld a,lld b,lld n)// a^b%n
{
lld res=1%n;
while(b>0)
{
if(b&0x01)
res=mul_mod(res,a,n);
a=mul_mod(a,a,n);
b>>=1;
}
return res;
}
struct hash
{
lld j,xj;
bool operator<(const hash &other)const
{
if(xj==other.xj)
return j>other.j;
return xj<other.xj;
}
};
hash table[100000];
inline bool cmp2(const hash &h1,const hash &h2)
{
return h1.xj<h2.xj;
}
int main()
{
long long x,z,k;
while(cin>>x>>z>>k)
{
if(0==x&&0==z&&0==k)
break;
x=x%z;
k=k%z;
lld m=(lld)ceil(sqrt((double)z))+1;
lld xj=k%z;
lld j;
for(j=0;j<m;++j)
{
table[j].j=j;
table[j].xj=xj;
xj=xj*x%z;
}
sort(table,table+m);
lld xm=exp_mod(x,m,z);
lld i;
lld left=1%z;
bool getAns=false;
for(i=1;i<=m;++i)
{
left=left*xm%z;
hash tmp;
tmp.xj=left;
hash *p=lower_bound(table,table+m,tmp,cmp2);
if(p!=table+m&&(*p).xj==left)
{
j=(*p).j;
// cout<<"i,j="<<i<<" "<<j<<endl;
getAns=true;
break;
}
}
if(getAns)
cout<<i*m-j<<endl;
else
cout<<"No Solution"<<endl;
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator