7-4.题目统计

在ACM程序设计竞赛赛场,当某个队伍正确解答一道题目后就会在其前面升起1个彩色气球。而且每种颜色的气球只能用在一道题目上,所以不同颜色的气球不能相互替代。已知比赛过程中已送出的气球数量以及每个气球的颜色,请统计已成功解决的不同题目的总数。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试先输入一个整数n(1≤n≤100),代表已经送出的气球总数,然后输入n个已送出气球的颜色(由长度不超过20且不包含空格的英文字母组成),数据之间间隔一个空格。注意,统计时,忽略气球颜色的大小写。

输出格式:

对于每组测试,在一行上输出一个整数,表示已成功解决的不同题目的总数。

输入样例:

1
2
3
4
5
4
5 RED Red Blue Green REd
2 Pink pINk
1 YeLLoW
6 Red Blue Orange Blue Red ORANGE

输出样例

1
2
3
4
3
1
1
3

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;

class Group
{
public:
int n; // 每行的字符串个数
vector<string> ballon; // 存放每行的字符串
};

int main()
{
int n;
vector<Group> group;
Group temp;
string temp_str;
cin >> n;
for (int i = 0; i < n; ++i)
{
temp.ballon.clear(); // 每次开始前需要清除掉temp.ballon里面存放的字符串
cin >> temp.n;
for (int j = 0; j < temp.n; ++j)
{
cin >> temp_str;
transform(temp_str.begin(), temp_str.end(), temp_str.begin(), toupper); // 将字符串转换为大写再存放
if (!count(temp.ballon.begin(), temp.ballon.end(), temp_str)) // 如果该字符串不存在则存入
temp.ballon.push_back(temp_str);
}
group.push_back(temp); // 存入一行数据
}

for (int i = 0; i < n; ++i)
{
cout << group[i].ballon.size() << endl; // 已经对相同字符串做了过滤,直接输出ballon的size即为不同字符串的个数
}
return 0;
}

ps:如果对于transform函数不太熟悉,请移步c++字符串大小写转换之transform用法