ACM준비/algospot

WORDLENGTH

조규현15 2015. 7. 9. 23:30
반응형

https://www.algospot.com/judge/problem/read/WORDLENGTH

 

algospot.com :: WORDLENGTH

단어 길이 재기 문제 정보 문제 (주의: 이 문제는 TopCoder SRM 202 Div 1 Easy 의 번역입니다) 단어들의 길이는 어떤 문장이 어렵게 쓰여진 문장인지, 쉬운 문장인지를 가르는 데 좋은 척도가 됩니다. 예

www.algospot.com

문자열을 이어서 조건을 3가지로 나눠 처리한다.

 

#include <stdio.h>
#define LINE_MAX 81
#define STR_MAX 50*LINE_MAX+1
int main()
{
	int C;
	for (scanf("%d", &C); C > 0; C--)
	{
		int i, j;
		int N, words_len = 0, total_len = 0, words_count = 0, TAG = 0, STR_LEN = 0;
		char STR[STR_MAX];
		STR[0] = '\0';

		scanf("%d", &N);
		getchar();
		for (i = 0; i < N; i++){
			char buf[LINE_MAX];
			fgets(buf, sizeof(buf)-1, stdin);
			
			for (j = 0; buf[j] != '\0'; j++)
				STR[STR_LEN++] = buf[j];
			STR[STR_LEN] = '\0';
		}

		for (i = 0; i < STR_LEN; i++){
			switch (STR[i])
			{
			case '-':
				if (TAG == 0)
					TAG = 1;
				else if (words_len != 0){
					++words_count;
					total_len += words_len;
					words_len = 0;
				}
				break;
			case '\n':
				if (TAG == 1)
					TAG = 2;
				else if (words_len != 0){
					++words_count;
					total_len += words_len;
					words_len = 0;
				}
				break;
			case ' ':
				if (words_len != 0){
					++words_count;
					total_len += words_len;
					words_len = 0;
				}
				break;
			default:
				if (TAG == 0 || TAG == 2 || words_len == 0)
					++words_len;
				else if (words_len != 0){
					++words_count;
					total_len += words_len;
					words_len = 1;
				}
				TAG = 0;
				break;
			}
		}
		if (words_len != 0)
		{
			++words_count;
			total_len += words_len;
		}
		printf("%.3lf\n", (double)total_len / (double)words_count);
	}
	return 0;
}

 

반응형

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

GRIDISLANDS  (0) 2015.07.30
BRACKETS  (0) 2015.07.30
SENTENCE  (0) 2015.07.07
PASS486  (0) 2015.07.07
DESIGNSCHOOL  (0) 2015.07.07