Here is a solution for Google's Code Jam 2010 Store Credit problem.
In Python the code is very simple. It is a brute force kindda solution.
if __name__ == "__main__":
fin = open('storeInput.inp','r')
inputdata = fin.readlines()
fin.close()
it = iter(inputdata)
numTestCases = int(it.next())
fout = open('storeOutput.txt','w')
for i in range(1,numTestCases+1):
str1 = "Case #%d: " %(i)
fout.write(str1)
mycredit = int(it.next())
num_items = int(it.next())
items_cost = [int(y) for y in it.next().split()]
found = False
for j in range(len(items_cost)-1):
if found:
break
for k in range(j+1,len(items_cost)):
if((items_cost[j]+items_cost[k])==mycredit):
fout.write(str(j+1) + " "+ str(k+1) + "\n")
found = True
break
fout.close()
In C, code for the same process is as follows,
#include
#include
void process(FILE *fin, FILE *fout)
{
int storeCredit,I,*p, i,iActual = 0,j;
fscanf(fin,"%d",&storeCredit);
fscanf(fin,"%d",&I);
p = (int *)malloc(sizeof(int)*I);
for(i=0;i
for(i=0;i < I - 1; i++)
for(j = i+1; j < I; j++)
if((*(p+i) + *(p+j)) == storeCredit)
{
fprintf(fout,"%d %d\n",i+1,j+1);
i = I;
break;
}
free(p);
}
int main()
{
FILE *fin,*fout;
int N,i;
fin = fopen("storeInput.inp","r");
fout = fopen("storeOutput.txt","w");
fscanf(fin,"%d",&N);
for(i=0;i {
fprintf(fout,"Case #%d: ",i+1);
process(fin, fout);
}
fclose(fin);
fclose(fout);
}
To make the C code, even faster, I tried another one using pthreads. I'll update that later.
In Python the code is very simple. It is a brute force kindda solution.
if __name__ == "__main__":
fin = open('storeInput.inp','r')
inputdata = fin.readlines()
fin.close()
it = iter(inputdata)
numTestCases = int(it.next())
fout = open('storeOutput.txt','w')
for i in range(1,numTestCases+1):
str1 = "Case #%d: " %(i)
fout.write(str1)
mycredit = int(it.next())
num_items = int(it.next())
items_cost = [int(y) for y in it.next().split()]
found = False
for j in range(len(items_cost)-1):
if found:
break
for k in range(j+1,len(items_cost)):
if((items_cost[j]+items_cost[k])==mycredit):
fout.write(str(j+1) + " "+ str(k+1) + "\n")
found = True
break
fout.close()
In C, code for the same process is as follows,
#include
#include
void process(FILE *fin, FILE *fout)
{
int storeCredit,I,*p, i,iActual = 0,j;
fscanf(fin,"%d",&storeCredit);
fscanf(fin,"%d",&I);
p = (int *)malloc(sizeof(int)*I);
for(i=0;i
for(i=0;i
if((*(p+i) + *(p+j)) == storeCredit)
{
fprintf(fout,"%d %d\n",i+1,j+1);
i = I;
break;
}
free(p);
}
int main()
{
FILE *fin,*fout;
int N,i;
fin = fopen("storeInput.inp","r");
fout = fopen("storeOutput.txt","w");
fscanf(fin,"%d",&N);
for(i=0;i
fprintf(fout,"Case #%d: ",i+1);
process(fin, fout);
}
fclose(fin);
fclose(fout);
}
To make the C code, even faster, I tried another one using pthreads. I'll update that later.
Jesso'S Blog: Store Credit - Google Code Jam 2010 >>>>> Download Now
ReplyDelete>>>>> Download Full
Jesso'S Blog: Store Credit - Google Code Jam 2010 >>>>> Download LINK
>>>>> Download Now
Jesso'S Blog: Store Credit - Google Code Jam 2010 >>>>> Download Full
>>>>> Download LINK