I am working on the UVa problem 10032 - Tug of War, where I'm given the time constraint of 3 seconds to solve the problem. I have pasted the criteria for the problem below.

A tug of war is to be arranged at the local office picnic. For the tug of war, the picnickers must be divided into two teams. Each person must be on one team or the other; the number of people on the two teams must not differ by more than 1; the total weight of the people on each team should be as nearly equal as possible.
Input

The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, and there is also a blank line between two consecutive inputs.

The first line of input contains n the number of people at the picnic. n lines follow. The first line gives the weight of person 1; the second the weight of person 2; and so on. Each weight is an integer between 1 and 450. There are at most 100 people at the picnic.
Output

For each test case, the output must follow the description below. The outputs of two consecutive cases will be separated by a blank line.

Your output will be a single line containing 2 numbers: the total weight of the people on one team, and the total weight of the people on the other team. If these numbers differ, give the lesser first.
Sample Input

1

3
100
90
200

Sample Output

190 200


My code is here

#include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    #include <iostream>


using namespace std;

int n, m, a, b, c, d, low, hi, turn, p[2], q[2], z[100] = {0};


void BubbleSort()
{
      int i, j, flag = 1;    // set flag to 1 to start first pass
      int temp;             // holding variable
      int numLength = m + 1;
      for(i = 1; (i <= numLength) && flag; i++)
     {
          flag = 0;
          for (j=0; j < (numLength -1); j++)
         {
               if (z[j+1] < z[j])      // ascending order simply changes to <
              {
                    temp = z[j];             // swap elements
                    z[j] = z[j+1];
                    z[j+1] = temp;
                    flag = 1;               // indicates that a swap occurred.
               }
          }
     }
     return;   //arrays are passed to functions by address; nothing is returned
}


/*
 * 
 */
int main(int argc, char** argv) {

    cin >> n;   //read in how many test cases
    for(int i = 0; i <n; i++)
    {
        cin >> m;   //read in how many persons
        for(int j = 1; j <= m; j++)
        {
            cin >> z[j];    //read in the weight of the persons and put them in an array
        }
        BubbleSort();   //sort the persons 

        low = 1;
        hi = m;
        p[0] = 0;
        p[1] = 0;
        q[0] = 0;
        q[1] = 0;
        if(m == 1)  //in case there is only 1
        {
            p[0] += z[m];
            p[1] ++;
        }
        else
        {
            while((hi - low) >= 0)  //while there are still people left
            {
                if((p[0] == q[0]) && ((hi - low) >= 1)) //case where the two ropes are equal
                {
                    p[0] += z[hi];  //add the heaviest person to p
                    p[1] ++;
                    hi --;  //subtract the heaviest person
                    q[0] += z[hi];  //add the heaviest person to q
                    q[1] ++;
                    hi --;  //subtract the heaviest person
                }
                else if((p[0] > q[0]) && ((hi - low) >= 1)) //case where p>q
                {
                    p[0] += z[low];  //add the lightest person to p
                    p[1] ++;
                    low ++; //take out the lightest person
                    q[0] += z[hi];  //add the heaviest person to q
                    p[1] ++;
                    hi --;  //subtract the heaviest person
                }
                else if((p[0] < q[0]) && ((hi - low)) >= 1) //case where p<q
                {
                    p[0] += z[hi];  //add the heaviest person to p
                    p[1] ++;
                    hi --;  //subtract the heaviest person
                    q[0] += z[low];  //add the lightest person to p
                    q[1] ++;
                    low ++; //take out the lightest person
                }
                else if((hi - low) == 0)    //case where there is an odd number of people
                {
                    if(p[0] < q[0])
                    {
                        p[0] += z[hi];  //add the heaviest person to p
                        p[1] ++;
                        hi --;  //subtract the heaviest person
                    }
                    if(p[0] > q[0])
                    {
                        q[0] += z[hi];  //add the heaviest person to q
                        q[1] ++;
                        hi --;  //subtract the heaviest person
                    }
                }
            }
        }
        if(p[0] < q[0]) //print statements
        {
            cout << p[0] << " " << q[0] << endl << endl;
        }
        else
        {
            cout << q[0] << " " << p[0] << endl << endl;
        }
    }

    return 0;
}

I don't know why, but the automatic grader tells me I am exceeding the time limit, which one of the possibilities there is an infinite loop. I can't seem to make it error out with any of the test cases I have been able to come up with. If there is anyone out there that can find a test case that does this, or can point out where I have made a mistake, I would be greatly appreciated.

Thanks
Aaron

Anybody have any advise on this? I still haven't been able to find out my problem.
Any help is appreciated.

i'm not familiar with the format of uva programs but perhaps your input method doesn't meet the standards of the grader?

sorry i can't help more

That isn't it. If it doesn't meet that criteria, it just comes back with a WA for wrong answer. I believe that one of the cases that they are using for input is causing my program to go into an infinite loop, but I can't think of one that does, and I can't find a spot in my code that would make an infinite loop.
Any advise is appreciated.
Thanks
Aaron.

This article has been dead for over six months. Start a new discussion instead.