P10467 [CCC 2007] Snowflake Snow Snowflakes

· · 题解

思路

我们可以用 vector 和 map 来解决这道题目。

每次读入 6 个数字,将这六个数字放进一个 vector 中并排序,然后用 map 判断之前有没有出现过,如果出现过,那么输出 Twin snowflakes found.,并且结束程序,如果没有,将它设为出现过。如果到了最后没有一片雪花是相同的,那么输出 No two snowflakes are alike.。

代码

#include<map>
#include<set>
#include<vector>
#include<iostream>
#include<algorithm>
std::map<std::vector<int>,bool>mp;
int main(){
    std::ios::sync_with_stdio(0);
    int n;
    std::cin>>n;
    for(int i=1;i<=n;i++){
        std::vector<int>s;
        for(int j=1;j<=6;j++){
            int x;std::cin>>x;
            s.push_back(x);
        }
        std::sort(s.begin(),s.end());
        if(mp[s]){
            std::cout<<"Twin snowflakes found.";
            return 0;
        }else{
            mp[s]=true;
        }
    }
    std::cout<<"No two snowflakes are alike.";
}