U E D R , A S I H C RSS

Tug Of War/이승한

TugOfWar/이승한

150/200 빼고는 답이 나오긴 하지만. 분명히 틀린 알고리즘.
급기야는 오류가 보이자 땜빵으로 매꿔버리기도 하고...-_-ㅋ;;
~cpp 
#include <iostream>
using namespace std;

const int MAX= 100;

int maxToZero(int input[]); //가장큰수를 0로 바꾸어주는 함
int returnAver(int input[]);

void main(){
	
	int weight[MAX] =	{0};
	int outA[MAX]	=	{0};
	int outB[MAX]	=	{0};

	int teamA, teamB;
	teamA = teamB	=	0;

	int aver		=	0;
	int maxInInput	=	0;
	int N			=	0;
	int inputN		=	0;
	int input		=	0;
	
	int A, B;
	A = B = 0;
	
	
	cin>>N;
	//23478
	for(int n = 0; n< N; n++)
	{
		cin.get();
		cin>> inputN;
		for(input =0; input<inputN; input++){
			cin>> weight[input];
		}
		cin.get();

		teamA = teamB = A = B = 0;
		aver = returnAver(weight);

		for(int cycle=0; cycle < MAX; cycle++){
			maxInInput = maxToZero( weight);

			if(	teamA + maxInInput == aver ){
				teamA += maxInInput;
			}else if( teamB + maxInInput == aver ){
				teamB += maxInInput;
			}else if( teamA < teamB ){
				teamA += maxInInput;
			}else{
				teamB += maxInInput;;
			}
		}
		
		outA[n] = teamA;
		outB[n] = teamB;
	}

	for(n=0; n<N; n++)
		cout<<outA[n]<<" "<<outB[n]<<endl;
}

int maxToZero(int * weight){
	int max = 0;
	int maxsIndex = 0;
	for(int cycle=0; cycle < MAX; cycle++){
		if(max < weight[cycle]){
			max = weight[cycle];
			maxsIndex = cycle;
		}
	}
	weight[ maxsIndex ] = 0;
	return max;
}

int returnAver(int * weight){
	int sum  =0;
	for(int cycle=0; cycle<MAX ; cycle++){
		sum += weight[cycle];
	}
	return ( sum / 2);
}

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0804 sec