题解:P10467 [CCC 2007] Snowflake Snow Snowflakes
NTT__int128 · · 题解
P10467 [CCC 2007] Snowflake Snow Snowflakes题解
直接上 STL。
开一个 map 记录每种雪花六角长度序列是否存在,若存在,则答案为 No two snowflakes are alike.,否则,答案为 Twin snowflakes found.。
本蒟蒻不会用高级的东西,只好用套了 pair 来维护序列。
代码:
#include <bits/stdc++.h>
using namespace std ;
map <pair <int , pair <int , pair <int , pair <int , pair <int , int> > > > > , bool> mp ;
int n , a[7] , b[7] ;
pair <int , pair <int , pair <int , pair <int , pair <int , int> > > > > make()
{
return {b[1] , {b[2] , {b[3] , {b[4] , {b[5] , b[6]}}}}} ;
}
int main()
{
cin >> n ;
for(int i = 1 ; i <= n ; i++)
{
for(int j = 1 ; j <= 6 ; j++) cin >> a[j] , b[j] = a[j] ;
if(mp.count(make()))
{
cout << "Twin snowflakes found." ;
return 0 ;
}
for(int j = 1 ; j <= 6 ; j++)
{
int s = 0 ;
for(int k = j ; k <= 6 ; k++) b[++s] = a[k] ;
for(int k = 1 ; k < j ; k++) b[++s] = a[k] ;
mp[make()] = 1 ;
s = 0 ;
for(int k = j ; k >= 1 ; k--) b[++s] = a[k] ;
for(int k = 6 ; k > j ; k--) b[++s] = a[k] ;
mp[make()] = 1 ;
}
}
cout << "No two snowflakes are alike." ;
return 0 ;
}