7 条题解
-
0
#include <bits/stdc++.h> unordered_map<string,int> mp; // 存储一片雪花的六个角的长度(下标1~6) string a[7]; int n; // 向哈希表中添加一种雪花的字符串表示 // x1: 起始角编号(1~6) // x2: 步长,1表示顺时针,-1表示逆时针 void add(int x1, int x2) { string s=""; int i=x1; do { s+=a[i]; // 拼接当前角的长度 i=(i+x2+5)%6+1; // 计算下一个角的编号,循环取模 }while(i!=x1); // 回到起始角时结束 if(mp[s]) // 如果该字符串已经出现过 { cout<<"Twin snowflakes found."; // 找到相同的雪花 exit(0); // 直接退出程序 }else{ mp[s]++;//没有出现过,加入哈希表,key对应的value+1 } } int main() { ios::sync_with_stdio(0); // 加速输入输出 cin.tie(0); cout.tie(0); cin>>n; // 读入雪花数量 for (int i=1;i<=n;i++) { for(int j=1;j<=6;j++) { cin>>a[j]; // 读入一片雪花的六个角 } for(int j=1;j<=6;j++) { //相当于每个雪花维护了两种字符串,一种顺时针,一种逆时针 //每种字符串有6个(对应6个旋转角度),加入哈希表 add(j,-1); // 以第j个角为起点,逆时针生成字符串 add(j,1); // 以第j个角为起点,顺时针生成字符串 } } cout<<"No two snowflakes are alike."; // 没有找到相同的雪花 }
信息
- ID
- 14976
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 4
- 已通过
- 3
- 上传者