Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

네트워크 지연 시간을 고려한 타이핑 게임 승자를 구하는 C++ 프로그램

다섯 개의 숫자 s, v1, v2, t1, t2가 주어진다고 가정해 봅시다. 아말(Amal)과 비말(Bimal)은 온라인으로 타이핑 게임을 진행하고 있으며, 이 게임에서 두 사람은 길이가 s인 문자열을 입력해야 합니다. 아말은 한 글자를 입력하는 데 v1밀리초가 걸리고, 비말은 한 글자를 입력하는 데 v2밀리초가 걸립니다. 아말의 네트워크 지연 시간은 t1밀리초, 비말의 네트워크 지연 시간은 t2밀리초입니다.

게임 진행 방식

연결 지연이 t밀리초일 때, 참가자의 경기는 다음과 같은 과정으로 진행됩니다.

  • 게임 시작 후 정확히 t밀리초가 지나면 참가자가 입력해야 할 텍스트를 전달받습니다.
  • 텍스트를 받자마자 곧바로 타이핑을 시작합니다.
  • 모든 텍스트 입력을 마친 뒤 정확히 t밀리초가 지나면 사이트에 결과 정보가 전송됩니다.

더 빨리 완료한 참가자가 승자가 되며, 두 참가자의 소요 시간이 같다면 무승부로 처리됩니다. 우리는 이 게임의 승자를 구해야 합니다.

예를 들어 입력이 s = 5, v1 = 1, v2 = 2, t1 = 1, t2 = 2라면, 아말의 결과 정보는 7밀리초 후에, 비말의 결과 정보는 14밀리초 후에 도착합니다. 따라서 출력은 아말(Amal)이며, 아말이 승리합니다.

풀이 접근 방법

이 문제는 각 참가자의 총 소요 시간을 계산한 뒤 서로 비교하는 간단한 방식으로 해결할 수 있습니다. 다음 단계를 따릅니다.

p := (s * v1) + (2 * t1)
q := (s * v2) + (2 * t2)
p와 q가 같다면:
    "Draw"를 반환합니다.
p < q라면:
    "Amal"을 반환합니다.
그 외의 경우:
    "Bimal"을 반환합니다.

여기서 총 소요 시간은 (문자열 길이 × 글자당 입력 시간) + (왕복 네트워크 지연 시간 2회)로 계산됩니다.

예제 코드 (C++)

다음 구현 예시를 통해 더 자세히 이해해 보겠습니다.

#include <bits/stdc++.h>
using namespace std;

string solve(int s, int v1, int v2, int t1, int t2) {
    int p = (s * v1) + (2 * t1);
    int q = (s * v2) + (2 * t2);
    if (p == q)
        return "Draw";
    else if (p < q)
        return "Amal";
    else
        return "Bimal";
}
int main() {
    int s = 5;
    int v1 = 1;
    int v2 = 2;
    int t1 = 1;
    int t2 = 2;
    cout << solve(s, v1, v2, t1, t2) << endl;
}

입력

5, 1, 2, 1, 2

출력

Amal