본문 바로가기

PS/Educational Codeforces

Educational Codeforces Round 008. A

반응형

A. Tennis Tournament

문제

https://codeforces.com/contest/628/problem/A

 

Problem - A - Codeforces

 

codeforces.com

 

문제요약

토너먼트식 경기를 한다. 사람 수가 n일 때 k=2^i<=n을 만족하는 가장 큰 k에 대해 n-k명의 사람을 제외하고 k명에 대해 k/2의 경기를 하여 k/2사람 및 제외된 n-k명의 사람을 다음 라운드로 진출시키는 것을 반복하여 결승까지 진행한다.

 

풀이

반복문을 통해 위 계산을 n이 2가 될 때 까지 해준다.

각 반복에서 경기 수를 확인하여 경기수 X (1 + 2b) 개의 물병을 누적한다.

타올의 경우 전체 참가자수 X p개이다.

 

소스코드

#include <stdio.h>
typedef long long ll;
int main(){
    int n, b, p, k, B=0;
    scanf("%d%d%d",&n,&b,&p);
    p*=n;
    b=b*2+1;
    for(;n>1;n-=k>>1){
        for(k=2; k<<1<=n; k<<=1);
        B+=b*(k>>1);
    }
    printf("%d %d",B,p);
}
반응형