electicode
ГлавнаяКурсыРесурсыЗадачиНациональная олимпиадаСоревнованияТаблица лидеров
...
Задачи/Алиса и Боб играют в простую игру/Разбор

Разбор: Алиса и Боб играют в простую игру

Обозначения и определения

  • NNN — количество раундов в игре
  • AwinsA_{\text{wins}}Awins​ — количество раундов, выигранных Алисой
  • BwinsB_{\text{wins}}Bwins​ — количество раундов, выигранных Бобом
  • Поскольку ровно один игрок выигрывает каждый раунд: Awins+Bwins=NA_{\text{wins}} + B_{\text{wins}} = NAwins​+Bwins​=N

Подзадача 1 (N=1N = 1N=1)

Когда есть только один раунд, победитель этого единственного раунда является общим победителем игры.

Алгоритм:

  1. Прочитать единственный символ из ввода
  2. Если символ A, Алиса выигрывает игру
  3. Если символ B, Боб выигрывает игру

Временная сложность: O(1)O(1)O(1)
Пространственная сложность: O(1)O(1)O(1)

Подзадача 2 (Общий случай, N≤9N \leq 9N≤9)

Для общего случая нам нужно подсчитать, сколько раундов выиграл каждый игрок, и определить, кто имеет больше побед.

Ключевое наблюдение:
Поскольку NNN всегда нечетное, не может быть ничьей. Следовательно, один игрок всегда будет иметь строго больше побед, чем другой.

Алгоритм:

  1. Прочитать количество раундов NNN
  2. Прочитать строку результатов раундов
  3. Подсчитать количество символов A, чтобы получить AwinsA_{\text{wins}}Awins​
  4. Подсчитать количество символов B, чтобы получить BwinsB_{\text{wins}}Bwins​ (в качестве альтернативы, Bwins=N−AwinsB_{\text{wins}} = N - A_{\text{wins}})

Временная сложность: O(N)O(N)O(N) — для подсчета символов в строке
Пространственная сложность: O(N)O(N)O(N) — для хранения входной строки (или O(1)O(1)O(1), если мы считаем во время чтения)


← Вернуться к задаче
Bwins​=N−Awins​
  • Если Awins>BwinsA_{\text{wins}} > B_{\text{wins}}Awins​>Bwins​, вывести "Алиса"
  • В противном случае, вывести "Боб"
  • #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        int N;
        string rounds;
        
        cin >> N >> rounds;
        
        int alice_wins = 0;
        int bob_wins = 0;
        
        for (char ch : rounds) {
            if (ch == 'A') {
                alice_wins++;
            } else {
                bob_wins++;
            }
        }
        
        if (alice_wins > bob_wins) {
            cout << "Alice" << endl;
        } else {
            cout << "Bob" << endl;
        }
        
        return 0;
    }