ACM준비/SCPC

좋은 수

조규현15 2015. 10. 15. 21:49
반응형

시간초과로 실패했다ㅜ

using namespace std;

int A[5000];
int N;
set DP;
int R;
int MAX;
void input(int V)
{
	if (MAX >= V)
		DP.insert(V);
}
void f1(int k)
{
	int V = A[k];
	if (DP.find(V) != DP.end()) ++R;

	input(V * 3);// case 1
	for (int i = 0; i < k; i++)
	{
		input(A[i] + V * 2);// case 2
		for (int j = i; j < k; j++)
			input(A[i] + A[j] + V);//case 3
	}
	
}
int main(int argc, char** argv) {
	int T;
	int test_case;
	/* 아래 freopen 함수는 input.txt 를 read only 형식으로 연 후,
	앞으로 표준 입력(키보드) 대신 input.txt 파일로 부터 읽어오겠다는 의미의 코드입니다.
	만약 본인의 PC 에서 테스트 할 때는, 입력값을 input.txt에 저장한 후 freopen 함수를 사용하면,
	그 아래에서 cin 을 사용하여 표준 입력 대신 input.txt 파일로 부터 입력값을 읽어 올 수 있습니다.
	따라서 본인의 PC 에서 테스트 할 때에는 아래 주석을 지우고 이 함수를 사용하셔도 됩니다.
	단, 이 시스템에서 "제출하기" 할 때에는 반드시 freopen 함수를 지우거나 주석 처리 하셔야 합니다. */
	//freopen("input.txt", "r", stdin);

	scanf("%d", &T);	//Codeground 시스템에서는 C++ 에서도 scanf 사용을 권장합니다.
	for (test_case = 1; test_case <= T; ++test_case) {
		//	이 부분에서 알고리즘 프로그램을 작성하십시오.

		DP.clear();
		scanf("%d", &N);

		R = 0;
		MAX = -1;
		for (int i = 0; i < N; i++)
		{
			scanf("%d", &A[i]);
			if (A[i] > MAX)
				MAX = A[i];
		}
		for (int i = 0; i < N; i++)
			f1(i);

		
		//	이 부분에서 정답을 출력하십시오. Codeground 시스템에서는 C++ 에서도 printf 사용을 권장합니다. 
		printf("Case #%d\n", test_case);
		printf("%d\n", R);
	}

	return 0;	//	정상종료 시 반드시 0을 리턴해야 합니다.
}
반응형

'ACM준비 > SCPC' 카테고리의 다른 글

미궁 속의 방  (0) 2015.10.15
다트 게임  (0) 2015.10.15
시험 공부  (0) 2015.10.14
프로그래밍 경진대회  (0) 2015.10.14
숫자 골라내기  (0) 2015.10.14