Page 11 of 14

103, understanding the sample out put (beginner)

Posted: Sat Jul 08, 2006 9:26 pm
by sathyashrayan
Dear group,
I can able to understand the
sample input but not the sample
out put. Can any one help this
beginner?
Thanks for any help

Posted: Tue Jul 11, 2006 3:28 am
by daveon
Hi,

Code: Select all

MEANING OF SAMPLE OUTPUT #1
5 (5 BOXES) 
3 (BOX#3  DIMENSION1=2  DIMENSION2=5  )
1 (BOX#1  DIMENSION1=3  DIMENSION2=7  )
2 (BOX#2  DIMENSION1=8  DIMENSION2=10 )
4 (BOX#4  DIMENSION1=9  DIMENSION2=11 )
5 (BOX#5  DIMENSION1=18 DIMENSION2=21 )
As you can see, all of DIMENSION1 are increasing and all of DIMENSION2 are increasing.

Posted: Tue Aug 01, 2006 2:05 pm
by Kallol
Hey !

It ia an old problem .... this bug should be checked before. What a bad type of bug it is. The OJ is accepting the wrong answer when right answers are judged WA . I thibg it is simple LIS problem afte sorting the boxes according to their volume . Why people are not fixing the bug ?

Python program for 103

Posted: Sun Aug 20, 2006 12:24 pm
by hedgehog1204
Here is cute Python code to solve the 103 problem:

Code: Select all

# Program that solves the Stacking Boxes problem
# http://acm.uva.es/p/v1/103.html

boxes = []		# list of boxes
nBox = 0		# number of boxes
dim = 0			# dimensions of boxes

# sort boxes by their measurements using bubble sort
def sort_boxes():
	for i in range(nBox-1):
		for j in range(nBox-i-1):
			for k in range(dim):
				if boxes[j][k] < boxes[j+1][k]:
					break
				elif boxes[j][k] > boxes[j+1][k]:
					boxes[j], boxes[j+1] = boxes[j+1], boxes[j]
					break


			
			
file = open('input.txt')
while file:
	line = file.readline()								# read line from file
	if line == "":										# exit if end of file
		break
	vars = line.strip().split(' ')						# get input data from file
	nBox, dim = int(vars[0]), int(vars[1])				

	boxes = []											# list of boxes
	for i in range(nBox):
		vars = file.readline().strip().split(' ')		# get input data from file
		mes = []										# measurements of a box
		for var in vars:
			mes.append(int(var))
		boxes.append(mes)								# add box to boxes
	for box in boxes:									# sort boxes' measurements
		box.sort()
		
	oldBoxes = []										# save previous arrangement of boxes
	for box in boxes:
		oldBoxes.append(box)	
		
	sort_boxes()										# sort boxes by their measurements
	
	# Find the longest sring of boxes:
	maxBoxes = []										# list that holds the longest nesting string
	maxBoxes.append(boxes[0])							# make it the first box by default
	for i in range(nBox-1):								# find the longest string of boxes, try start with box[i]
		tempBoxes = []									# temporary boxes that make a string
		i1, i2 = i, i+1									# indices of boxes that will be compared
		while (i2 < nBox):
			nests = True
			for j in range(dim):						# check if box[i1] nests in box[i2]
				if boxes[i1][j] > boxes[i2][j]:
					nests = False
					break
			if nests:									# if yes - modify tempBoxes and check if it longer then maxBoxes
				if tempBoxes == []:
					tempBoxes.append(boxes[i1])
				tempBoxes.append(boxes[i2])
				if len(tempBoxes)>len(maxBoxes):
					maxBoxes = tempBoxes
				i1, i2 = i2, i2+1						# modify indices accordingly
			else:										# if not - try next box
				i2 += 1

	print len(maxBoxes)									# print output
	for box in maxBoxes:
		print oldBoxes.index(box)+1,
	print
file.close()[

Posted: Sun Aug 20, 2006 12:28 pm
by hedgehog1204
...and without comments its cuter:

Code: Select all

# Program that solves the Stacking Boxes problem
# http://acm.uva.es/p/v1/103.html

boxes = []		
nBox = 0		
dim = 0			

# sort boxes by their measurements using bubble sort
def sort_boxes():
	for i in range(nBox-1):
		for j in range(nBox-i-1):
			for k in range(dim):
				if boxes[j][k] < boxes[j+1][k]:
					break
				elif boxes[j][k] > boxes[j+1][k]:
					boxes[j], boxes[j+1] = boxes[j+1], boxes[j]
					break


			
			
file = open('input.txt')
while file:
	line = file.readline()								
	if line == "":										
		break
	vars = line.strip().split(' ')						
	nBox, dim = int(vars[0]), int(vars[1])				

	boxes = []											
	for i in range(nBox):
		vars = file.readline().strip().split(' ')		
		mes = []										
		for var in vars:
			mes.append(int(var))
		boxes.append(mes)								
	for box in boxes:									
		box.sort()
		
	oldBoxes = []										
	for box in boxes:
		oldBoxes.append(box)	
		
	sort_boxes()										
	
	# Find the longest sring of boxes:
	maxBoxes = []										
	maxBoxes.append(boxes[0])							
	for i in range(nBox-1):								
		tempBoxes = []									
		i1, i2 = i, i+1									
		while (i2 < nBox):
			nests = True
			for j in range(dim):						
				if boxes[i1][j] > boxes[i2][j]:
					nests = False
					break
			if nests:									
				if tempBoxes == []:
					tempBoxes.append(boxes[i1])
				tempBoxes.append(boxes[i2])
				if len(tempBoxes)>len(maxBoxes):
					maxBoxes = tempBoxes
				i1, i2 = i2, i2+1						
			else:										
				i2 += 1

	print len(maxBoxes)									
	for box in maxBoxes:
		print oldBoxes.index(box)+1,
	print
file.close()

Posted: Tue Sep 19, 2006 4:52 am
by Nils
hedgehog1204: i tried your python script and for the sample input from guitarlover it outputs the wrong answer. I played a bit with your code and here is the part i have changed:
(maybe the indention got messed up)

Code: Select all

 
# Find the longest sring of boxes:
   maxBoxes = []                              
   maxBoxes.append(boxes[0])                     
   for i in range(nBox-1):                        
      tempBoxes = []                           
      posStack = []
      i1, i2 = i, i+1                          
      while (i2 < nBox ):
         nests = True
         for j in range(dim):                  
            if boxes[i1][j] > boxes[i2][j]:
               nests = False
               break
         if nests:                           
            if tempBoxes == []:
               tempBoxes.append(boxes[i1])
               posStack.append(i1)
            tempBoxes.append(boxes[i2])
            posStack.append(i2)
            if len(tempBoxes)>len(maxBoxes):
               maxBoxes = tempBoxes
            i1, i2 = i2, i2+1                  
         else:
            if i2 < nBox:
               i2 += 1
               if not (i2 < nBox):
                  if len(posStack) < 2:
                     continue
                  i2 = posStack.pop() + 1
                  tempBoxes.pop()
                  i1 = posStack[len(posStack)-1]

Posted: Mon Oct 02, 2006 11:30 am
by rickyliu
My program outputs the correct answers for the sample input and the input from guitalover but I got a WA :cry:

STL sort

Posted: Sat Nov 18, 2006 6:16 pm
by Relja
I had problem with C++ STL sort()..
When i use it , i got WA , but with bubble sort it's AC..
I overload operators < and = ..What can be wrong?

Posted: Sat Dec 02, 2006 12:40 pm
by joy
My program produced correct answers to all the sample inputs, but got a wa. Plz help........

Code: Select all

 #include<stdio.h>

struct X{
	int arry[12];
};

int indx[33], b[33], n, d, length[33];
struct X a[33];

int comp(struct X s1, struct X s2)
{
	int i;
	for(i=0; i<d; i++)
		if(s1.arry[i]>s2.arry[i])
			return 1;
		else if(s1.arry[i]<s2.arry[i])
			return 0;
	return 0;
}

int isin(struct X s1, struct X s2)
{
	int i;
	for(i=0; i<d; i++)
		if(s1.arry[i]>=s2.arry[i])
			return 0;
	return 1;
}


void main()
{
	freopen("in.txt", "r", stdin);
	int i, k, j, l, bb, res, x, c;
	struct X temp;
	while(scanf("%d %d", &n, &d)==2)
	{
		for(i=0; i<n; i++)
		{
			indx[i]=i;
			for(j=0; j<d; j++)
				scanf("%d", &a[i].arry[j]);
						
			for(k=0; k<d-1; k++)
				for(l=k+1; l<d; l++)
					if(a[i].arry[k]>a[i].arry[l])
						a[i].arry[k]^=a[i].arry[l]^=a[i].arry[k]^=a[i].arry[l];
		}

		for(i=0; i<n-1; i++)
			for(j=i+1; j<n; j++)
				if(comp(a[i], a[j]))
				{
					indx[i]^=indx[j]^=indx[i]^=indx[j];
					temp=a[i];
					a[i]=a[j];
					a[j]=temp;
				}
		for(i=0; i<n; i++)
			length[i]=1;
		res=1;
		x=0;
		for(i=0; i<n-1; i++)
			for(j=i+1; j<n; j++)
				if(isin(a[i], a[j]))
					if(length[i]+1>length[j])
					{
						length[j]=length[i]+1;
						if(res<=length[j])
						{
							res=length[j];
							x=j;
						}
					}
		c=res;
		bb=1;
		b[0]=indx[x];
		for(i=x-1; i>=0; i--)
			if(length[i]==c-1)
			{
				b[bb++]=indx[i];
				c--;
			}
		printf("%d\n", res);

		for(i=bb-1; i>=0; i--)
			printf("%d ", b[i]+1);
		puts("");
	}
}
Is my method wrong? Or I have missed something. Thanks in advance....

You are not alone, and perhaps help is on the way

Posted: Sat Dec 02, 2006 8:43 pm
by kogorman
You are not alone. :D This thread started with the same complaint by another. I had it too.

I verified that the above-posted solution indeed:
a: gives the wrong answer sometimes
b: is graded Accepted by the judge.

I have posted a bug in the bugs Forum, and perhaps the moderators will fix it, or at least take the broken judge offline.

In the meanwhile, I would not try to fix your code. It may be correct as it is.

The moderators weigh in

Posted: Sat Dec 02, 2006 9:04 pm
by kogorman
The moderators have replied to my bug. They showed a test case in which my program gave the wrong answer. They seem to agree that there need to be more test cases to prevent broken programs from being accepted, and will probably take care of that soon.

In the meantime, perhaps looking at the moderators' test case will help you debug your program:
http://online-judge.uva.es/board/viewto ... 4642#54642

Posted: Sat Dec 02, 2006 9:15 pm
by joy
my program gives:

Code: Select all

13
28 7 8 9 10 26 15 11 16 17 19 18 20
i think this is also right output........... but why WA??

Posted: Sat Dec 23, 2006 10:45 am
by joy
I am really confuse ... why this code is Wrong??
:( I cannot find any bag

please help......

103 - Is This Answer Valid

Posted: Wed May 23, 2007 4:50 am
by kernal
Hello
I am working on 103 (Stacking Boxes) and am getting Wrong Answers.

I try the test cases and for this input:

8 6
5 2 20 1 30 10
23 15 7 9 11 3
40 50 34 24 14 4
9 10 11 12 13 14
31 4 18 8 27 17
44 32 13 19 41 19
1 2 3 4 5 6
80 37 47 18 21 9

My output is this:
4
7 2 5 8

however the problem set shows:
4
7 2 5 6

I believe my answer is also correct. Could someone please confirm this for me.

Posted: Wed May 23, 2007 8:38 pm
by Jan
Search the board first. If you find a thread use it. So, post your problem in an existing thread.