题目链接:

https://vjudge.net/problem/POJ-3349

题目大意:

每个雪花都有六个分支,用六个整数代表,这六个整数是从任意一个分支开始,朝顺时针或逆时针方向遍历得到的。输入多个雪花,判断是否有形状一致的雪花存在。

比如输入的是1 2 3 4 5 6,

则2 3 4 5 6 1,3 4  5 6 1 2,……,6 5 4 3 2 1,5 4 3 2 1 6等都是相同形状的。

解题思路:

这里用到了最小表示法的思想,将输入的6个数字依次顺推和逆推,求出最小表示法(可以理解成字典序最小),然后排一下序,判断有没有相邻的相等。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
struct snow
{
int a[];
bool operator <(const snow& b)const
{
int i = ;
while(a[i] == b.a[i] && i < )i++;
return i != && a[i] < b.a[i];
}
bool operator == (const snow& b)const
{
int i = ;
while(a[i] == b.a[i] && i < )i++;
return i == ;
}
snow(int b[])
{ snow tmp;
memset(a, INF, sizeof(a));
for(int start = ; start < ; start++)
{
for(int j = ; j < ; j++)//顺
tmp.a[j] = b[(start + j) % ];
if(tmp < *this)*this = tmp;//最小表示 for(int j = ; j < ; j++)//逆
tmp.a[j] = b[(start - j + ) % ];
if(tmp < *this)*this = tmp;//最小表示
}
}
snow(){}
}s[maxn];
int main()
{
int n, a[];
scanf("%d", &n);
for(int i = ; i < n; i++)
{
for(int j = ; j <; j++)
scanf("%d", &a[j]);
s[i] = snow(a);
}
sort(s, s + n);
bool ok = ;
for(int i = ; i < n - ; i++)
{
if(s[i] == s[i + ])
{
ok = ;
break;
}
}
if(ok)cout<<"Twin snowflakes found."<<endl;
else cout<<"No two snowflakes are alike."<<endl;
return ;
}

最新文章

  1. spring framework核心框架体系结构
  2. 关于yuv与rgb的互转
  3. codeforces 700A As Fast As Possible 二分求和?我觉得直接解更好
  4. servlet 学习(二)
  5. POJ 1917
  6. MFC编程入门之八(对话框:创建对话框类和添加控件变量)
  7. 龙威零式_团队项目例会记录_18 (Beta架构讨论)
  8. ACM题目————一笔画问题
  9. OpenMP的简单使用教程
  10. DOS窗口中文显示乱码
  11. Android 建立View 圆角
  12. 安装PIL遇到的问题
  13. 【Android 系统开发】使用 Source InSight 阅读 Android 源码
  14. zookeeper应用场景-java
  15. day08--文件操作(2)
  16. JS全局对象的属性
  17. 分布式日志框架之ExceptionLess【二】:自行搭建帮助文档【译文】
  18. 《算法》第五章部分程序 part 6
  19. 在tableviewcell里面嵌入switch控件以及如何获取switch控件数据
  20. linux bash关闭标准输出1(exec 1&lt;&amp;-)后重新打开

热门文章

  1. 用sphinx-doc优雅的写文档
  2. C++容器嵌套实现动态二维数组(Vector2D)
  3. 数据层——ImageData层
  4. Day04 流程控制 while 和for循环
  5. my11_mysql事务隔离
  6. 配置MapReduce程序运行环境
  7. mysql5.7导出到csv
  8. Mybatis学习笔记13 - 动态sql之set标签
  9. (转)mkpasswd 的使用
  10. [原创]II7/IIS8屏蔽YisouSpider蜘蛛