【 초보 진급 의 길 】 P1042 탁구 - 낙 곡

1. 문제 부분
제목 배경 국제 탁구 연맹 의 현재 의장 인 샐러드 는 취임 이후 일련의 개혁 을 추진 하여 탁구 운동 이 전 세계 에서 보급 되도록 추진 하 는 데 뜻 을 세 웠 다.이 가운데 11 점 제 개혁 은 큰 논란 을 불 러 일 으 켰 고, 일부 선수 들 은 새로운 규칙 에 적응 하지 못 해 은퇴 를 선택 할 수 밖 에 없 었 다.화 화 는 그 중의 한 사람 이다. 그 는 은퇴 한 후에 탁구 연구 에 들 어가 11 점 제 와 21 점 제 가 선수 에 게 미 치 는 서로 다른 영향 을 알 아 내 려 고 했다.그의 연 구 를 전개 하기 전에 그 는 먼저 그의 다년간 의 경기 통계 데 이 터 를 분석 해 야 하기 때문에 너의 도움 이 필요 하 다.
제목 은 화 화가 다음 과 같은 방식 으로 분석 한 다음 에 먼저 경기 각 공의 승 부 를 표 로 한 다음 에 각각 11 점 제 와 21 점 제 에서 쌍방의 경기 결과 (기록 말미 까지) 를 계산한다.
예 를 들 어 현재 이런 기록 이 있다. (그 중에서 W 는 화 화가 1 점 을 얻 었 다 고 표시 하고 L 은 화 화의 상대 가 1 점 을 얻 었 다 고 표시 한다)
WWWWWWWWWWWWWWWWWWWWWWLW
11 점 제 에서 이때 경기 의 결 과 는 화 화의 1 세트 11 - 0 승리, 2 세트 11 - 0 승리 로 3 세트 가 진행 되 고 있 으 며 현재 스코어 는 1 - 1 이다.그리고 21 점 제 에서 이때 경기 결 과 는 화 화의 1 세트 21 - 0 으로 이 겨 2 세트 가 진행 되 고 있 으 며 스코어 는 2 - 1 이다.만약 한 게임 이 막 시작 된다 면, 이때 스코어 는 0 대 0 이다.점수 차 가 2 보다 크 거나 같 을 때 까지 한 판 이 끝났다.
당신 의 프로그램 은 일련의 경기 정보 에 대한 입력 (WL 형식) 으로 정확 한 결 과 를 출력 하 는 것 입 니 다.
입력 형식 은 입력 파일 마다 몇 줄 의 문자열 을 포함 하고 문자열 은 대문자 W, L, E 로 구성 되 어 있 습 니 다.그 중에서 E 는 경기 정보 가 끝 났 음 을 나타 내 고 프로그램 은 E 이후 의 모든 내용 을 무시 해 야 한다.
출력 형식 출력 은 두 부분 으로 구성 되 고 각 부분 에 몇 줄 이 있 으 며 각 줄 은 한 경기 의 점수 (경기 정보 입력 순서에 따라) 에 대응 합 니 다.그 중 첫 번 째 부분 은 11 점 제 결과 이 고, 두 번 째 부분 은 21 점 제 결과 이 며, 두 부분 사 이 는 하나의 빈 줄 로 나 뉜 다.
입 출력 샘플
입력 \ # 1 WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWLWE
출력 \ # 1 11: 01: 1: 1
21:0 2:1
2. 문제 풀이 과정
사고 (1) 입력 한 경기 정 보 를 단일 문자 로 저장 하고 네 개의 배열 로 각각 11 점 제 와 21 점 제 에서 화 와 상대방 의 점 수 를 저장 하 며 cnct 1 과 cnct 2 는 서로 다른 점 수 를 저장 합 니 다.(2) 경기 정 보 를 순환 적 으로 입력 하면 W 는 화 웨 이 가 1 점 을 얻 고 화 웨 이의 점 수 를 저장 하 는 배열 + 1, L 이 같다 는 것 을 나타 낸다.한 측 점수 의 배열 이 대응 하 는 수치 가 11 / 21 에 달 하고 점수 차이 가 2 보다 크 거나 같 을 때 이 경기 가 끝나 면 세트 수 cnct 1 / cnct 2 + 1 이다.입력 한 문자 가 'E' 일 때 까지 입력 을 중단 합 니 다.(3) 수출 사례 에 따라 점수 정 보 를 출력 한다.
AC 답안 제출
#include 
using namespace std;
char sc;//       
int w1[10000],w2[10000],l1[10000],l2[10000],cnt1,cnt2;//                  

int main()
{
    while(cin>>sc&&sc!='E')
	{
		if(sc=='W')
		{
			w1[cnt1]++;//11   
			l1[cnt2]++;//21   
		}
		if(sc=='L')
		{
			w2[cnt1]++;//11   
			l2[cnt2]++;//21   
		}
		
		//11   
		if( (w1[cnt1]>=11&&w1[cnt1]-w2[cnt1]>=2)||(w2[cnt1]>=11&&w2[cnt1]-w1[cnt1]>=2) )
			cnt1++;
		//21   
		if( (l1[cnt2]>=21&&l1[cnt2]-l2[cnt2]>=2)||(l2[cnt2]>=21&&l2[cnt2]-l1[cnt2]>=2) )
			cnt2++;			
	}
	
	for(int i=0;i<=cnt1;i++)
		cout<<w1[i]<<":"<<w2[i]<<endl;
	
	printf("
"
); for(int j=0;j<=cnt2;j++) cout<<l1[j]<<":"<<l2[j]<<endl; return 0; }

소결
1. 이 문제 의 설명 은 '줄 당 최대 25 자, 최대 2500 줄' 이기 때문에 배열 의 최대 필요 한 크기 를 대충 계산 하고 11 점 제 를 저장 하 는 배열 w1, w2 는 최대 (25) 까지 켜 야 한다.×2500 ÷ 10) = 6250 의 크기 때문에 주 함 수 를 쓰기 전에 각 세트 점 수 를 저장 하 는 배열 은 모두 10000 으로 폭발 방지 표를 열 었 다.2. while (cin > > n) 대 법 이 좋 습 니 다. 제 가 문 제 를 푸 는 과정 에서 입력 이 끝 난 것 에 대한 판정 문 제 를 해 결 했 습 니 다. 한 글자 만 정의 한 다음 에 입력 한 문자 가 'E' 일 때 까지 반복 해서 입력 해 야 합 니 다.
while (cin > > n) 가 무슨 뜻 이에 요?C + 초보 자의 탑승 난이도 정리 ①

좋은 웹페이지 즐겨찾기