算法与数据结构第八次作业——散列表

数据结构 散列表7.12 三角形游戏

★实验任务

给定n个三角形,用a,b,c表示三角形的三条边(三角形可能有重复)。之后有m次询问,每次询问一个三角形在给定的n个三角形中出现的次数。

★数据输入

第一行为n,之后n行,每行有a,b,c三个数字表示三角形的三条边;接下来一行为m,之后有m行询问,每行有a,b,c三个数字,表示要询问的三角形的三边。 数据保证a,b,c为正整数且可以构成一个三角形,且a,b,c不一定有序 对于40%的数据,n<=100,m<=100,a,b,c<=100 对于70%的数据,n<=1000,m<=1000,a,b,c<=1000 对于100%的数据,n<=5,000,m<=100,000,a,b,c<=999999

★数据输出

对于每次询问,输出此三角形在之前给定的n个三角形中出现的次数

输入示例

3
2 2 3
3 3 4
2 3 2
3
2 3 2
3 3 4
1 1 1

输出示例

2
1
0

★提示 整数Hash、字符串Hash

#include<iostream>
#include<algorithm>
using namespace std;
class triangle
{
public:
	int l[3];
public:
	triangle(){}
	triangle(int a, int b, int c)
	{
		l[0] = a;
		l[1] = b;
		l[2] = c;
		sort(l, l + 3);
	}
	bool IsSame(triangle b)
	{
		bool flag = true;
		for (int i = 0; i < 3; i++)
		{
			if (l[i] != b.l[i])
			{
				flag = false;
				break;
			}
		}
		return flag;
	}
};
int main()
{
	int n;
	int a, b, c;
	cin >> n;
	triangle* t = new triangle[n];
	for (int i = 0; i < n; i++)
	{
		cin >> a >> b >> c;
		t[i] = triangle(a, b, c);
	}
	int m;
	cin >> m;
	triangle t2;
	int sum;
	for (int i = 0; i < m; i++)
	{
		sum = 0;
		cin >> a >> b >> c;
		t2 = triangle(a, b, c);
		for (int j = i; j < n; j++)
		{
			if (t2.IsSame(t[j]))
			{
				sum++;
			}
		}
		cout << sum <<endl;
	}
}
posted @ 2020-11-03 20:38  与谁  阅读(442)  评论(0编辑  收藏  举报