| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
虽然没看你的代码,但是在别人的博客上复制一个过得代码,你那组数据并不相同,可以菜,请别误导大家In Reply To:附上WA的代码和一组测试数据,求大佬指导 Posted by:zz0812 at 2018-08-21 20:25:15 代码来自https://blog.csdn.net/alongela/article/details/8245005
膜拜膜拜
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1200010;
const int H = 1200007;
struct Node
{
int num[6];
int next;
};
Node node[N];
int cur;
int hashTable[H];
void initHash()
{
cur = 0;
for (int i = 0; i < H; ++i) hashTable[i] = -1;
}
unsigned int getHash(int* num)
{
unsigned int hash = 0;
for (int i = 0; i < 6; ++i)
{
hash += num[i];
}
return hash % H;
}
bool cmp(int* num1, int* num2)
{
for (int i = 0; i < 6; ++i)
{
if (num1[i] != num2[i]) return false;
}
return true;
}
void insertHash(int* num, unsigned int h)
{
for (int i = 0; i < 6; ++i) node[cur].num[i] = num[i];
node[cur].next = hashTable[h];
hashTable[h] = cur;
++cur;
}
bool searchHash(int* num)
{
unsigned h = getHash(num);
int next = hashTable[h];
while (next != -1)
{
if (cmp(num, node[next].num)) return true;
next = node[next].next;
}
insertHash(num, h);
return false;
}
int main()
{
int num[2][12];
int n;
bool twin = false;
initHash();
scanf("%d", &n);
while (n--)
{
for (int i = 0; i < 6; ++i)
{
scanf("%d", &num[0][i]);
num[0][i + 6] = num[0][i];
}
if (twin) continue;
for (int i = 0; i < 6; ++i)
{
num[1][i + 6] = num[1][i] = num[0][5 - i];
}
for (int i = 0; i < 6; ++i)
{
if (searchHash(num[0] + i) || searchHash(num[1] + i))
{
twin = true;
break;
}
}
}
if (twin) printf("Twin snowflakes found.\n");
else printf("No two snowflakes are alike.\n");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator