开始按hash做的 交上去就wa 但是和标称拍了半天也没有不一样的 可能是生成的数据太水了吧...
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
#define mod 10000007
#define ll long long
using namespace std;
ll ha;
int n,a[maxn][],base,J[];
bool f[mod+];
int init()
{
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
int main()
{
while(cin>>n)
{
memset(f,,sizeof(f));int falg=;
for(int i=;i<=n;i++)
for(int j=;j<=;j++)
a[i][j]=init();
J[]=;J[]=;J[]=;J[]=;J[]=;J[]=;
base=a[][];
for(int i=;i<=n;i++)
{
int c[],num=;
for(int j=;j<=;j++)
if(a[i][j]==base)
{
ha=;
for(int k=j,r=;r<=;k++,r++)ha+=a[i][k%]*J[r];
if(ha<)ha=-ha;ha%=mod;c[++num]=ha;
ha=;
for(int k=j,r=;r<=;k--,r++)ha+=a[i][(k+)%]*J[r];
if(ha<)ha=-ha;ha%=mod;c[++num]=ha;
}
for(int j=;j<=num;j++)
if(f[c[j]]==)
{
printf("Twin snowflakes found.\n");
falg=;break;
}
if(falg)break;
for(int j=;j<=num;j++)f[c[j]]=;
}
if(falg)continue;
printf("No two snowflakes are alike.\n");
}
return ;
}
/*
看许多人博客里说啥不用判断结构也能过....
数据有问题吧...说说正解
最小表示法 是解决同构问题的一种方法
然而并没有看懂 暴力求得(不知道为啥比标称的算法求跑的还快)
然后每个雪花用最小表示法唯一表示 最后排序找相邻的有没有相同的
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define maxn 100010
using namespace std;
int n,a[maxn][],falg,c[];
int init()
{
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
int mycmp(int *a,int *b)
{
for(int i=;i<;i++)
if(b[i]<a[i])return ;
else if(a[i]<b[i])return ;
return ;
}
int cmp(const void *a,const void *b)
{
int *x = (int*)a, *y = (int *)b;
for(int i=;i<;i++)
{
if(*(x+i)<*(y+i))return -;
if(*(x+i)>*(y+i))return ;
}
falg=;
return ;
}
void Insert(int k)
{
int ti[];
for(int i=;i<;i++)
ti[i]=c[i];
for(int s=;s<;s++)
{
int t[];
for(int i=s,r=;r<;r++,i++)t[r]=c[i%];
if(mycmp(ti,t))
for(int i=;i<;i++)ti[i]=t[i];
for(int i=s,r=;r<;r++,i--)
t[r]=c[(i+)%];
if(mycmp(ti,t))
for(int i=;i<;i++)ti[i]=t[i];
}
memcpy(a[k],ti,sizeof(int)*);
}
int main()
{
while(cin>>n)
{
falg=;
for(int i=;i<n;i++)
{
for(int j=;j<;j++)c[j]=init();
Insert(i);
}
qsort(a,n,sizeof(a[]),cmp);
if(falg==)printf("Twin snowflakes found.\n");
else printf("No two snowflakes are alike.\n");
}
return ;
}

poj 3349 (最小表示法)的更多相关文章

  1. POJ 1509 最小表示法

    题目链接:http://poj.org/problem?id=1509 题意:给定一个字符串,求一个起点使字符串从该起点起的字符串字典序最小[题目的字符串起点从1开始] 思路:最小表示法模板题 #de ...

  2. POJ 1635 树的最小表示法/HASH

    题目链接:http://poj.org/problem?id=1635 题意:给定两个由01组成的串,0代表远离根,1代表接近根.相当于每个串对应一个有根的树.然后让你判断2个串构成的树是否是同构的. ...

  3. POJ 1509 Glass Beads【字符串最小表示法】

    题目链接: http://poj.org/problem?id=1509 题意: 求循环字符串的最小表示. 分析: 浅析"最小表示法"思想在字符串循环同构问题中的应用 判断两字符串 ...

  4. UVA 719 / POJ 1509 Glass Beads (最小表示法/后缀自动机)

    题目大意: 给出一个长度为N的字符串,求其字典序最小的循环同构. N<=10W. 算法讨论: 算法一.最小表示法.定义题. 算法二.后缀自动机. Codes: #include <iost ...

  5. POJ 3581 Sequence ——后缀数组 最小表示法

    [题目分析] 一见到题目,就有了一个显而易见obviously的想法.只需要每次找到倒过来最小的那一个字符串翻转就可以了. 然而事情并不是这样的,比如说505023这样一个字符串,如果翻转了成为320 ...

  6. HDU 4162 Shape Number (最小表示法)

    题意:给你一串n个数,求出循环来看一阶差的最小字典序:数字串看成一个顺时针的环,从某一点开始顺时针循环整个环,保证字典序最小就是答案 例如给你 2 1 3 就会得到(1-2+8 注意题意负数需要加8) ...

  7. HDU 2609 最小表示法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2609 题意:给定n个循环链[串],问有多少个本质不同的链[串](如果一个循环链可以通过找一个起点使得和 ...

  8. HDU 4162 最小表示法

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4162 题意:给定一个只有0-7数字组成的串.现在要由原串构造出一个新串,新串的构造方法:相邻2个位置的数字 ...

  9. UVA 1314 最小表示法

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36117 题意:给定长度为n的字符串,求一个起点使字符串从该起点起的 ...

随机推荐

  1. backbone学习笔记(一)

    因为工作的需要,从今天起对backbone的学习过程做下记录. 学习计划: 1.1周看基本知识(2014/1/18-2014/1/25) 2.基本知识总结(2014/1/26) 3.半周按教程写hel ...

  2. window 7 C盘整理

    发现两篇不错的文章可以参考一下: http://blog.renren.com/blog/200083873/467545630 http://www.uedbox.com/win7-c-disk-s ...

  3. extjs combobox 设置下拉时显示滚动条 设置显示条数

    extjs在点击下拉时如果没有限制它的高度,那么它的默认最大高度是300,显示的时候就会显示300的高度,知道选项内容超过这个高度时才会自动显示滚动条,往往在有些时候我们希望让combobox显示一个 ...

  4. JavaScript语言内置对象

    String(字符串对象)RegExp(正则表达式对象)Number(数字对象)Math(数学对象)Function(函数对象)Error(异常对象)Date(日期/时间对象)Boolean(布尔对象 ...

  5. codevs 1198 国王游戏

    传送门 题目描述 Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位 ...

  6. 【HDOJ】1107 武林

    简单模拟,题目数据太弱太弱了. /* 1107 */ #include <iostream> #include <cstdio> #include <cstring> ...

  7. -_-#【Canvas】

    context.lineWidth = 0.5 incorrect display lineWidth=1 at html5 canvas canvas.save() canvas.restore() ...

  8. mysql 安装截图

    这里有3个选项, 1.Developer Machine(开发机器),个人用桌面工作站,占用最少的系统资源 2.Server Machine(服务器),MySQL服务器可以同其它应用程序一起运行,例如 ...

  9. 乱译文档--Musca介绍

    胡乱翻译的,信,达,雅只能到达的水平.发现错误的话望留言好修改. 原文地址:http://aerosuidae.net/musca.html aerosuidae.net Musca 果蝇 A sim ...

  10. 基于Minifilter框架的文件过滤驱动理解

    概述 Minifilter即File System Minifilter Drivers,是Windows为了简化第三方开发人员开发文件过滤驱动而提供的一套框架,这个框架依赖于一个称之为Filter ...