Acwing第78场周赛-4719. 商品种类

74 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情

题目描述

货架中摆放着 n 件商品,每件商品都有两个属性:名称和产地。

当且仅当两件商品的名称和产地都相同时,两件商品才视为同一种商品。

请你统计,货架中一共有多少种不同的商品。

输入格式

第一行包含整数 n。

接下来 n 行,每行包含两个字符串,分别表示一件商品的名称和产地。

输入字符串的长度范围为 [1,10],且仅包含小写字母。

输出格式

一个整数,表示商品种类数量。

数据范围

前 4 个测试点满足 1n51≤n≤5
所有测试点满足 1n1001≤n≤100

输入样例1:

5
b y
m r
b y
m y
m g

输出样例1:

4

输入样例2:

3
abc def
abc def
abc def

输出样例2:

1

set思路分析

  • 众所周知,set是一个好东西,set可以有一个默认的排序,然后set也是一个动态的数组STL容器,它可以容纳基本数据类型

解题步骤

  • 1.我们先创建一个pair对,里面存储两个字符串,命名为PSS
  • 2.接着创建一个set,存储PSS
  • 3.由于set容器的特性,相同的会抵消,不会二次存储
  • 4.输入数据
  • 5.输出set的size值

set代码展示

#include<iostream>
#include<set>
using namespace std;

typedef pair<string, string>PSS;
set<PSS>s;

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		string a, b;
		cin >> a >> b;
		s.insert({ a,b });
	}
	cout << s.size();
	return 0;
}

map思路分析

  • 众所周知,map是个好东西,map是一个哈希表,可以用来建立索引和映射,而且对于相同的索引数据,map可以进行去重的操作,所以我们可以建立map来进行索引存储

解题步骤

  • 1.我们先创建一个pair对,里面存储两个字符串,命名为PSS
  • 2.接着建立一个map的索引,用来存储PSS和int
  • 3.由于map的去重特性,相同的元素会抵消去重
  • 4.输出数据
  • 5.输出数据

map代码展示

#include<iostream>
#include<map>
using namespace std;

typedef pair<string, string>PSS;
map<PSS, int>mp;

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		string a, b;
		cin >> a >> b;
		mp[{a, b}] = 1;
	}
	cout << mp.size();
	return 0;
}

PS:STL容器用的舒服啊~