Being unique is so important to people on Mars that even their lottery is designed in a unique way. The rule of winning is simple: one bets on a number chosen from [1,104]. The first one who bets on a unique number wins. For example, if there are 7 people betting on { 5 31 5 88 67 88 17 }, then the second one who bets on 31 wins.
Input Specification:
Each input file contains one test case. Each case contains a line which begins with a positive integer N (≤ ) and then followed by N bets. The numbers are separated by a space.
Output Specification:
For each test case, print the winning number in a line. If there is no winner, print None
instead.
Sample Input 1:
7 5 31 5 88 67 88 17
Sample Output 1:
31
Sample Input 2:
5 888 666 666 888 888
Sample Output 2:
None
Ω
我老家那边卖彩票,规则很有趣,第一个买到唯一数字的人中奖。按照时间顺序给出所有买家所买的数字,要求输出winner的数字,没有则None。
那么可以用一个vector来记录彩票数字的时间顺序,那么如何快速判断在此之前是否已有相同数字呢。这里我另外用了一个map建立起了(lottery number,vector index)的映射,从而能快速找到vector中的位置,找到后直接将其的中奖资格置false,因此vector的类型为<int,bool>
,最后再从头找的一个true的数字即可。
C ☺ D E
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main()
{
int n, m;
cin >> n;
vector<pair<int, bool>> lottery;
map<int, int> idx;
for (int i = 0; i < n; ++i)
{
cin >> m;
if (idx.find(m) == idx.end())
{
idx[m] = lottery.size();
lottery.push_back({m, true});
}
else
lottery[idx[m]].second = false;
}
for (auto &k: lottery)
if (k.second)
{
cout << k.first;
return 0;
}
cout << "None";
}