10213 - How Many Pieces of Land ?
Moderator: Board moderators
-
- New poster
- Posts: 9
- Joined: Sun Dec 09, 2007 6:46 am
-
- New poster
- Posts: 32
- Joined: Tue Feb 13, 2007 1:31 pm
thx for giving me the formula. I got AC.Sedefcho wrote:Oh, sorry for that stupid remark of mine.
I see now, 10 is just the number of test cases to follow.
By the way I also have a BigInt custom class but currently
it does support division. And so I can not use it.
I mean that as the formula is :we should be able to divide by 24 once we generate the BigIntCode: Select all
F(N) = ( N * (N-1) * (N*N-5*N+18) / 24 ) + 1
valueCode: Select all
N * (N-1) * (N*N-5*N+18)
Should I necessarily implement division in my BigInt or is
that some tricky workaround letting me get away without
doing division of 24 at the end of the computation ?
What do you think about that ?
I also have something for you.
this code is +,-,*,/ for super big number.
in div_string(), if u want to know remainder, u can returns s_remainder.
Code: Select all
inline int compare_string(string s1, string s2)
{
if(s1.length()<s2.length())
return -1;
else if(s1.length()>s2.length())
return 1;
else
{
for(int i=0; i<s1.length(); ++i)
{
if(s1[i]<s2[i])
return -1;
else if(s1[i]>s2[i])
return 1;
}
}
return 0;
}
inline string sub_string(string s1, string s2)
{
int i;
string s;
bool positive=true;
if(compare_string(s1,s2)<0)
{
positive=false;
s1.swap(s2);
}
//add leading zero
s2.insert(0,s1.length()-s2.length(),'0');
//s1 - s2
for(i=s1.length()-1; i>=0; --i)
if(s1[i]>=s2[i])
s.insert(0,1,s1[i]-s2[i]+'0');
else
{
s.insert(0,1,s1[i]-s2[i]+10+'0');
s1[i-1]-=1;
}
//trim
for(i=0; s[i]=='0'; ++i);
s=s.substr(i);
if(!s.length())
s="0";
//negative
if(!positive)
s.insert(0,1,'-');
return s;
}
inline string add_string(string s1, string s2)
{
int c=0,d;
string s;
int i,j;
for(i=s1.length()-1, j=s2.length()-1;
(s1.length()>=s2.length())?j>=0:i>=0; --i, --j)
{
d=(s1[i]-'0')+(s2[j]-'0')+c;
if(d>=10)
s.insert(0,1,(d-10)+'0');
else
s.insert(0,1,d+'0');
c=d/10;
}
if(s1.length()>s2.length())
{
while(i>=0)
{
d=(s1[i]-'0')+c;
if(d>=10)
s.insert(0,1,(d-10)+'0');
else
s.insert(0,1,d+'0');
c=d/10;
--i;
}
if(c>0)
s.insert(0,1,c+'0');
}
else if(s1.length()<s2.length())
{
while(j>=0)
{
d=(s2[j]-'0')+c;
if(d>=10)
s.insert(0,1,(d-10)+'0');
else
s.insert(0,1,d+'0');
c=d/10;
--j;
}
if(c>0)
s.insert(0,1,c+'0');
}
else
{
if(c>0)
s.insert(0,1,c+'0');
}
return s;
}
inline string mul_string(string s1, string s2)
{
int i,j;
int c=0,d;
string s;
vector<string> vs;
vs.clear();
for(j=s2.length()-1; j>=0; --j)
{
for(i=s1.length()-1; i>=0; --i)
{
d=(s2[j]-'0')*(s1[i]-'0')+c;
c=d/10;
d%=10;
s.insert(0,1,d+'0');
}
if(c>0)
{
s.insert(0,1,c+'0');
c=0;
}
for(i=0; i<s2.length()-1-j; ++i)
s.append("0");
vs.push_back(s);
s.clear();
}
s=vs[0];
for(i=1; i<vs.size(); ++i)
s=add_string(s,vs[i]);
return s;
}
inline string div_string(string s1, string s2)
{
string s,s_dividend,s_remainder;
int i,j,d;
if(!compare_string(s2,"0"))
cout<<"divisor is 0!!"<<endl;
else if(!compare_string(s2,"1"))
{
s=s1;
s_remainder="0";
}
else if(!compare_string(s1,s2))
{
s="1";
s_remainder="0";
}
else if(compare_string(s1,s2)<0)
{
s="0";
s_remainder=s1;
}
else
{
for(i=0; i<s1.length();)
{
s_dividend.append(1,s1[i]);
//trim
for(j=0; s_dividend[j]=='0'; ++j);
s_dividend=s_dividend.substr(j);
if(!s_dividend.length())
s_dividend="0";
if(compare_string(s_dividend,s2)<0)
{
s.append("0");
s_remainder=s_dividend;
}
else if(!compare_string(s_dividend,s2))
{
s.append("1");
s_remainder="0";
s_dividend.clear();
}
else
{
d=0;
while(compare_string(s_dividend,s2)>=0)
{
s_dividend=sub_string(s_dividend,s2);
++d;
}
s.append(1,d+'0');
s_remainder=s_dividend;
}
++i;
}
//trim
for(i=0; s[i]=='0'; ++i);
s=s.substr(i);
if(!s.length())
s="0";
for(i=0; s_remainder[i]=='0'; ++i);
s_remainder=s_remainder.substr(i);
if(!s_remainder.length())
s_remainder="0";
return s;
}
}
Re: 10213 need answers to test cases
Thanks for your test data, I got AC last.Martin Macko wrote:My AC's output:898989 wrote:Code: Select all
0 1 5 7 10 100 10000 124 21533 456 79888 1048576 2147483647
Code: Select all
1 1 16 57 256 3926176 416416762492501 9388878 8955419035380574 1778051731 1697001927971339669 50371620921287095091201 886151993063477126682488902248300547
Re: 10213 - How many pieces of land?
I got AC using the Combinatorics equation but i don't understand why does it works.
F(n) = 1+ number of lines + number of intersections
What's the idea behind it? How is that sumation directly involved with the areas produced?
Thanks.
F(n) = 1+ number of lines + number of intersections
What's the idea behind it? How is that sumation directly involved with the areas produced?
Thanks.
Re: 10213 - How many pieces of land?
Here is my code. But I don't understand why I am getting WA. I have matched many test cases, but the outputs were same.
Code: Select all
#include <stdio.h>
#include <math.h>
int main()
{
int t,i;
long long n,m;
scanf("%d",&t);
for (i = 0; i < t; i++)
{
scanf("%lld",&n);
m=(n*(n-1)*(n*n-5*n+18)/24)+1;
printf("%lld\n",m);
}
return 0;
}
100213
I have got WA in this code. But the output is not different I think.
Code: Select all
#include <stdio.h>
#include <math.h>
int main()
{
int t,i;
long long n,m;
scanf("%d",&t);
for (i = 0; i < t; i++)
{
scanf("%lld",&n);
m=(n*(n-1)*(n*n-5*n+18)/24)+1;
printf("%lld\n",m);
}
-
- New poster
- Posts: 7
- Joined: Mon Jun 10, 2013 2:14 pm
Re: 10213 - How many pieces of land?
Any one help? I've tried all tests here but still WA
My code: (Updated)
My code: (Updated)
Code: Select all
{$mode objfpc}
uses math;
type
bignum=record
size: longint;
a: array[0..1000] of qword;
end;
var
base: longint=1000000000;
ans: array[0..4] of longint=(1,1,2,4,8);
t,tt,n: longint;
one: bignum;
operator :=(x: qword): bignum;
begin
fillchar(result.a,sizeof(result.a),0); result.size:=0;
repeat
inc(result.size); result.a[result.size]:=x mod base; x:=x div base;
until x=0;
end;
operator +(x,y: bignum): bignum;
var
i: longint;
tmp: qword;
begin
result.size:=max(x.size,y.size); tmp:=0;
for i:=1 to result.size do
begin
inc(tmp,x.a[i]+y.a[i]); result.a[i]:=tmp mod base; tmp:=tmp div base;
end;
if tmp>0 then
begin
inc(result.size); result.a[result.size]:=tmp;
end;
end;
operator *(x: bignum; y: qword): bignum;
var
i: longint;
tmp: qword;
begin
result.size:=x.size; tmp:=0;
for i:=1 to x.size do
begin
inc(tmp,x.a[i]*y); result.a[i]:=tmp mod base; tmp:=tmp div base;
end;
if tmp>0 then
begin
inc(result.size); result.a[result.size]:=tmp;
end;
end;
function c(n,k: longint): bignum;
var
i,j: longint;
a: array[0..5] of longint;
begin
for i:=1 to k do a[i]:=n-k+i;
for i:=k downto 1 do
for j:=k downto 1 do
if a[j] mod i=0 then
begin
a[j]:=a[j] div i; break;
end;
result:=a[1];
for i:=2 to k do result:=result*a[i];
end;
procedure answer(x: bignum);
var
s,tmp: ansistring;
i: longint;
begin
s:='';
for i:=1 to x.size do
begin
str(x.a[i],tmp);
while (i<x.size) and (length(tmp)<9) do tmp:='0'+tmp;
s:=tmp+s;
end;
writeln(s);
end;
begin
// assign(input,'chip.in'); reset(input); assign(output,''); rewrite(output);
read(t); one:=1;
for tt:=1 to t do
begin
read(n);
if n<5 then writeln(ans[n]) else answer(c(n,2)+c(n,4)+one);
end;
// close(input); close(output);
end.
Last edited by chipchip3412 on Thu Jul 25, 2013 8:55 am, edited 1 time in total.
-
- Guru
- Posts: 5947
- Joined: Thu Sep 01, 2011 9:09 am
- Location: San Jose, CA, USA
Re: 10213 - How many pieces of land?
Code: Select all
1
2115115464
Code: Select all
833921323402617589467244223246289043
Check input and AC output for thousands of problems on uDebug!
-
- New poster
- Posts: 7
- Joined: Mon Jun 10, 2013 2:14 pm
Re: 10213 - How many pieces of land?
Thank you very much, brianfry, I've detected a bug in my bignum code.
But still WA, anyway![:lol:](./images/smilies/icon_lol.gif)
I've updated my code, are there any other test cases?
But still WA, anyway
![:lol:](./images/smilies/icon_lol.gif)
I've updated my code, are there any other test cases?
-
- Guru
- Posts: 5947
- Joined: Thu Sep 01, 2011 9:09 am
- Location: San Jose, CA, USA
Re: 10213 - How many pieces of land?
I checked some random input and didn't see any differences between your pascal code and my AC C code.
Check input and AC output for thousands of problems on uDebug!