I got WA for times.
Can anyone tell me that in which case the answer should be 'No solution'? Or give some test?
11533 - Special Number
Moderator: Board moderators
Re: 11533 - Special Number
Leading zeroes are allowed.
-
- New poster
- Posts: 20
- Joined: Mon Oct 20, 2008 6:26 am
Re: 11533 - Special Number
Thanks, I got AC, and I just neglect this input:
2 0 0
the answer is 0, not 'No solution'.
2 0 0
the answer is 0, not 'No solution'.
Re: 11533 - Special Number
Yes it can be such test.
I assume that in N-base number, maximum length of the special number is N^2.
So i loop at most N^2 times and checks it can be generated if not prints out "I give up "
I assume that in N-base number, maximum length of the special number is N^2.
So i loop at most N^2 times and checks it can be generated if not prints out "I give up "
Re: 11533 - Special Number
Hi
All of the previews bug + some other one had been considered in the contest but I got Run Time Error.
may any one help me to solve this problem.
thanks a lot.
All of the previews bug + some other one had been considered in the contest but I got Run Time Error.
may any one help me to solve this problem.
thanks a lot.
Code: Select all
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
#define MAXSIZE 40100
class BigInt {
public:
char *data;
int size;
bool sign;
BigInt() { data=NULL; size=0; sign=true; }
BigInt(long long);
BigInt(char *);
BigInt(BigInt &);
BigInt& operator=(BigInt &);
BigInt& operator=(char*);
BigInt& operator=(long long);
~BigInt();
};
BigInt::BigInt(long long num) {
if(num==0) {
size=0;
data=NULL;
sign=true;
return;
}
char temp[MAXSIZE];
int i=0;
sign=true;
if(num<0) {
sign=false;
num*=-1;
}
for(i=0;num;i++) {
temp[i]=num%10+48;
num/=10;
}
temp[i]=0;
size=i;
data=new char[i+1];
for(i=0;i<=size;i++)
data[i]=temp[i];
}
BigInt::BigInt(char *num) {
int i=0,j;
sign=true;
if(num[0]=='-') {
sign=false;
i=1;
}
while(num[i]=='0') i++;
if(num[i]==0) {
size=0;
data=NULL;
sign=true;
return;
}
for(size=0,j=i;num[j];size++,j++);
data=new char[size+1];
for(j=1;j<=size;i++,j++)
data[size-j]=num[i];
data[size]=0;
}
BigInt::BigInt(BigInt &other) {
sign=other.sign;
size=other.size;
if(other.data==NULL) {
data=NULL;
return;
}
data=new char[other.size+1];
int i;
for(i=0;other.data[i];i++)
data[i]=other.data[i];
data[i]=0;
}
BigInt::~BigInt() {
if(data)
delete[] data;
}
BigInt& BigInt::operator=(BigInt &other) {
if(data)
delete[] data;
sign=other.sign;
size=other.size;
if(other.data==NULL) {
data=NULL;
return (*this);
}
data=new char[other.size+1];
int i;
for(i=0;other.data[i];i++)
data[i]=other.data[i];
data[i]=0;
return (*this);
}
BigInt& BigInt::operator=(long long num) {
if(data)
delete[] data;
if(num==0) {
size=0;
data=NULL;
sign=true;
return *this;
}
char temp[MAXSIZE];
int i=0;
sign=true;
if(num<0) {
sign=false;
num*=-1;
}
for(i=0;num;i++) {
temp[i]=num%10+48;
num/=10;
}
temp[i]=0;
size=i;
data=new char[i+1];
for(i=0;i<=size;i++)
data[i]=temp[i];
return *this;
}
BigInt& BigInt::operator=(char* num) {
if(data)
delete[] data;
int i=0,j;
sign=true;
if(num[0]=='-') {
sign=false;
i=1;
}
while(num[i]=='0') i++;
if(num[i]==0) {
size=0;
data=NULL;
sign=true;
return *this;
}
for(size=0,j=i;num[j];size++,j++);
data=new char[size+1];
for(j=1;j<=size;i++,j++)
data[size-j]=num[i];
data[size]=0;
return *this;
}
/////////////////////////////////////////////////////////////////////////////////////////
bool operator<(BigInt &,BigInt &);
bool operator>(BigInt &,BigInt &);
bool operator==(BigInt &,BigInt &);
void BigAdd(BigInt &,BigInt &,BigInt &);
void BigSub(BigInt &,BigInt &,BigInt &);
void BigMul(BigInt,BigInt,BigInt &);
long long BigDiv(BigInt ,long long,BigInt &);
int BigRem(BigInt &,long long);
/////////////////////////////////////////////////////////////////////////////////////////
bool operator<(BigInt &a,BigInt &b) {
if(a.sign!=b.sign) {
if(b.sign)
return true;
return false;
}
if(a.size!=b.size) {
if((b.size>a.size)&&a.sign)
return true;
if((b.size<a.size)&&a.sign==false)
return true;
return false;
}
int i;
for(i=a.size-1;i>=0;i--) {
if(a.data[i]!=b.data[i]) {
if((b.data[i]>a.data[i])&&a.sign)
return true;
if((b.data[i]<a.data[i])&&!a.sign)
return true;
return false;
}
}
return false;
}
bool operator>(BigInt &a,BigInt &b) {
return (b<a);
}
bool operator==(BigInt &a,BigInt &b) {
if(a.sign!=b.sign||a.size!=b.size)
return false;
int i;
for(i=0;i<a.size;i++)
if(a.data[i]!=b.data[i])
return false;
return true;
}
void BigAdd(BigInt &a,BigInt &b,BigInt &Res) {
if(a.size==0) {
Res=b;
return;
}
if(b.size==0) {
Res=a;
return;
}
int i,pos,max=a.size,carry=0;
if(a.sign==b.sign) {
if(b.size>a.size) max=b.size;
char res[MAXSIZE];
res[max+2]=0;
for(i=0,pos=max+1;i<max;i++,pos--) {
res[pos]=carry;
if(i<a.size)
res[pos]+=a.data[i]-48;
if(i<b.size)
res[pos]+=b.data[i]-48;
carry=res[pos]/10;
res[pos]%=10;
res[pos]+=48;
}
if(carry) {
res[pos]='1';
--pos;
}
if(!a.sign) {
res[pos]='-';
--pos;
}
Res=(res+pos+1);
return;
}
b.sign=a.sign;
BigSub(a,b,Res);
}
void BigSub(BigInt &a,BigInt &b,BigInt &Res) {
if(b.size==0) {
Res=a;
return;
}
if(a.size==0) {
b.sign=!b.sign;
Res=b;
return;
}
BigInt *A=&a,*B=&b;
bool si;
int i,carry=0,pos;
if(a.sign==b.sign) {
char res[MAXSIZE];
si=a.sign;
a.sign=b.sign=true;
if(a<b) {
si=!si;
A=&b;
B=&a;
}
res[A->size+1]=0;
for(i=0,pos=A->size;i<A->size;i++,pos--) {
res[pos]=(A->data[i]-48);
res[pos]+=carry;
if(i<B->size) res[pos]-=(B->data[i]-48);
if(res[pos]<0) {
carry=-1;
res[pos]+=10;
}
else
carry=0;
res[pos]+=48;
}
++pos;
while(pos<=A->size&&res[pos]=='0') ++pos;
if(res[pos]==0)
Res="";
if(!si) {
--pos;
res[pos]='-';
}
Res=(res+pos);
return;
}
b.sign=a.sign;
BigAdd(a,b,Res);
}
void BigMul(BigInt a,BigInt b,BigInt &Res) {
if(a.size==0||b.size==0) {
Res="";
return;
}
bool si=(a.sign==b.sign);
if(a.size==1&&a.data[0]=='1') {
b.sign=si;
Res=b;
return;
}
if(b.size==1&&b.data[0]=='1') {
a.sign=si;
Res=a;
return;
}
char res[MAXSIZE];
int i,j,carry,pos,len=a.size+b.size+1;
for(j=0,i=len;j<a.size;j++,i--) {
res[i]=0;
a.data[j]-=48;
}
for(j=0;j<b.size;i--,j++) {
res[i]=0;
b.data[j]-=48;
}
for(i=0,pos=len-1;i<a.size;i++,pos--) {
carry=0;
for(j=0;j<b.size;j++) {
res[pos-j]+=a.data[i]*b.data[j]+carry;
carry=res[pos-j]/10;
res[pos-j]%=10;
}
if(carry)
res[pos-j]=carry;
}
if(carry==0)
pos++;
for(i=pos-j+1;i<len;i++)
res[i]+=48;
if(!si) {
res[pos-j]='-';
pos--;
}
Res=(res+pos-j+1);
}
long long BigDiv(BigInt a,long long b,BigInt &Res) {
if(b==0)
return -1;
long long num=0;
int i,pos=0;
char res[MAXSIZE];
for(i=a.size-1;num<b&&i>=0;i--) {
num*=10;
num+=a.data[i]-48;
}
while(num>=b) {
res[pos]=num/b+48;
num%=b;
pos++;
for(;num<b&&i>=0;i--) {
num*=10;
num+=a.data[i]-48;
if(num<b) {
res[pos]='0';
pos++;
}
}
}
res[pos]=0;
Res=res;
return num;
}
int BigRem(BigInt &a,int b) {
int num=0,i,pos=0;
for(i=a.size-1;num<b&&i>=0;i--) {
num*=10;
num+=a.data[i]-48;
}
while(num>=b) {
num%=b;
pos++;
for(;num<b&&i>=0;i--) {
num*=10;
num+=a.data[i]-48;
if(num<b)
pos++;
}
}
return num;
}
void print(BigInt &num,long long b,int si) {
int rem;
int zz=0;
BigInt tt,z;
z=zz;
int temp[1000],i=0;
while(!(num==z)) {
rem=BigDiv(num,b,tt);
num=tt;
temp[i++]=rem;
}
rem=i;
while(rem<=si) {
cout<<" 0";
rem++;
}
while(i--) {
cout<<" "<<temp[i];
}
cout<<endl;
}
int main() {
BigInt A,B,C,P,temp,X,Y,N,T2,P2;
int i,j,k,l,t=1;
int x,y,n,T,mx;
while(cin>>n>>x>>y) {
T=y*n-1;
P2=n;
P=1;
X=x;
Y=y;
N=n;
T2=x*y;
mx=10*n;
cout<<"Case "<<t++<<":";
if(y==0) {
if(x==0) {
cout<<" 0"<<endl;
continue;
}
}
if(x>=n||x<=0||y<=0) {
i=mx+1;
goto end;
}
for(i=0;i<=mx;i++) {
BigMul(P,X,A);
if(A<T2)
goto next;
BigSub(A,T2,A);
if(BigDiv(A,T,A)==0) {
BigMul(A,N,A);
BigAdd(A,X,A);
print(A,n,i);
break;
}
next:
temp=P;
BigMul(temp,P2,P);
}
end:
if(i>mx)
cout<<" No solution"<<endl;
}
}
Re: 11533 - Special Number
How to print "No solution".
printf("No solution\n");
or
printf("Case %d: No solution\n",id);
printf("Case %d:No solution\n",id);
printf("No solution\n");
or
printf("Case %d: No solution\n",id);
printf("Case %d:No solution\n",id);
-
- Learning poster
- Posts: 97
- Joined: Fri Aug 22, 2008 10:18 pm
- Location: CSE.SUST.SYLHET
Re: 11533 - Special Number
JUST print like that
printf("Case %d: No solution\n",id);
- IMPOSSIBLE MEANS I M POSSIBLE
Re: 11533 - Special Number
Hi,
I always get Runtime Error with this code:
even if i tested it at home with thousands test case without error. Could you help me?
The program is very simple an I can't get any clue of the possible error. Do you know what are the limits of the number in the input?
Y can be assumed to be a 32-bits integer?
I always get Runtime Error with this code:
Code: Select all
#include <iostream>
#include <cstdlib>
#define MAXLEN 100000
using namespace std;
int t;
int num[MAXLEN];
int carry[MAXLEN];
int X,Y,N;
void solve(int caseno);
int main(){
cin>>t;
int i;
for(i = 0; i<t; i++)
solve(i+1);
// system("PAUSE");
return 0;
}
void solve(int caseno){
cin>>N>>X>>Y;
int i,j;
for(i = 0; i<N*N+65; i++)
carry[i] = num[i] = 0;
num[0] = X;
carry[1] = 0;
long long int result = 0;
long long int car = 0;
long long int carSaved = 0;
lldiv_t d;
for(i = 1; i<= N*N; i++){
result = num[i-1] * Y + carry[i];
d = div(result,(long long int) N);
num[i] = d.rem;
car = d.quot;
carSaved = car;
j = i+1;
while(car != 0){
d = div(car,(long long int)N);
carry[j] += d.rem;
car = d.quot;
j++;
}
//cout<<"num["<<i<<"]: "<<num[i]<<" Carry[i+1]: "<<carry[i+1]<<endl;
if(num[i] == X && carSaved ==0)
break;
}
if(num[i] != X || carry[i+1] != 0){
cout<<"Case "<<caseno<<": No solution"<<endl;
return;
}
cout<<"Case "<<caseno<<": ";
for(j = i-1; j>=0; j--)
cout<<num[j]<<" ";
cout<<endl;
}
The program is very simple an I can't get any clue of the possible error. Do you know what are the limits of the number in the input?
Y can be assumed to be a 32-bits integer?
Re: 11533 - Special Number
No one can help me??