| ||||||||||
| 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 | |||||||||
Re:在网上找了CTU的数据过了,为什么在这测评会WAIn Reply To:在网上找了CTU的数据过了,为什么在这测评会WA Posted by:464271301 at 2013-03-17 16:47:10 不是很懂PASCAL,有几个地方貌似逻辑有错,不过改了还是AC不了:
var a,b,c,k,t,now,c1,x,y:int64;
flag:boolean;
function gcd(a,b:int64):int64;
var n,m:int64;
begin
if b=0 then
begin x:=1;y:=0;exit(a);end;
gcd:=gcd(b,a mod b);
n:=x;m:=y;
x:=m;y:=n-a div b*m;
end;
procedure main;
begin
readln(a,b,c,k);
if k=0 then
begin flag:=false;exit;end;
t:=1<<(k-1);t:=t<<1;
now:=gcd(t,c);
if (b-a) mod now<>0 then writeln('FOREVER') else
begin
c1:=(b-a) div now;
t:=t div now;
x:=(y*c1 mod t+t) mod t;
writeln(x);
end;
end;
begin
flag:=true;
while flag do main;
end.
顺便帖个自己C过了的代码:
long long A,B,C,K,i,j,k,gcd;
void calc(long long K,long long C)
{
if(!C)
{
i=1;
j=0;
gcd=K;
return;
}
calc(C,K%C);
k=i-K/C*j;
i=j;
j=k;
}
main()
{
while(scanf("%lld%lld%lld%lld",&A,&B,&C,&K))
{
if(!K) break;
K=1LL<<K;
calc(K,C);
if((B-A)%gcd) puts("FOREVER");
else
{
i=K/gcd;
printf("%lld\n",(j*(B-A)/gcd%i+i)%i);
}
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator