算法与数据结构第八次作业——散列表
数据结构 散列表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;
}
}