1 条题解

  • 0
    @ 2025-8-24 22:58:13

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar NTT__int128
    可爱捏!||喵~

    搬运于2025-08-24 22:58:13,当前版本为作者最后更新于2024-07-11 21:41:22,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    P10467 [CCC 2007] Snowflake Snow Snowflakes题解

    直接上 STL

    开一个 map 记录每种雪花六角长度序列是否存在,若存在,则答案为 No two snowflakes are alike.,否则,答案为 Twin snowflakes found.

    本蒟蒻不会用高级的东西,只好用套了 55 重的 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 ;
    }
    
    • 1

    信息

    ID
    10167
    时间
    1000ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者