A. Contest Start #727 Div.2

LONGNEW·2021년 7월 2일
0

CP

목록 보기
4/155
post-thumbnail

https://codeforces.com/contest/1539/problem/A
시간 1초, 메모리 256MB

input :

  • k (1≤k≤1000)
  • n, x, t (1≤n,x,t≤2⋅109)

output :

  • i번째 테스트 케이스에서 dissatisfaction한 참가자들의 수를 출력하시오.

조건 :

  • n people participating in some contest, they start participating in x minutes intervals

  • n명이 참여하는 대회에서 참가자들은 x분 간격으로 참여한다.

  • Duration of contest is t minutes for each participant

  • 각 참여자들에게 콘테스트 시간은 t분이 할당된다.

  • When a participant finishes the contest, their dissatisfaction equals to the number of participants that started the contest (or starting it now), but haven't yet finished it.

  • 참가자가 콘테스트를 마쳤을 때 dissatisfaction은 현재 콘테스트에 참여하고 있는 인원 수와 동일하다.(아직 마치지 않은)


t // x를 통해 어떤 사람이 콘테스트에 참여했을 때 가장 큰 dissatisfaction을 얻는 경우를 알 수 있다. 나누어 떨어지는 경우도 포함이다. 이 경우에는 본인이 끝나는 시간에 인제 시작을 하는 사람이 존재하는 경우이다.

dissatisfaction을 얻는 경우는 2가지가 존재한다.
1. 인원이 충분히 많아서 t // x를 얻고 나서 짜투리를 추가적으로 계산해야 하는 경우
2. 짜투리만을 계산하는 경우

짜투리를 계산할 때는 등차 수열을 계산한다고 생각하면 된다. 어차피 뒤에 남아있는 인원의 수는 계속 감소하므로 n ~ 1까지의 합을 구하도록 하면 된다.

import sys

k = int(sys.stdin.readline())
data = []
for i in range(k):
    n, x, t = map(int, sys.stdin.readline().split())
    term = t // x
    remain = n - term

    if remain > 0:
        print(remain * term + (term - 1) * term // 2)
    else:
        print(n * (n - 1) // 2)

0개의 댓글