开始按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. jquery之bind(),live(),delegate()

    大纲: 1.bind(),live(),delegate()的含义 2.三者基于相同的原理即js的事件冒泡 3.三者相互之间的异同. bind()+live() V.S. delegate():bin ...

  2. SQL SAVE TRANSACTION

    --创建存储过程 create procedure qiantaoProc @asd nchar(10) as begin begin try begin transaction innerTrans ...

  3. python logging模块使用

    近来再弄一个小项目,已经到收尾阶段了.希望加入写log机制来增加程序出错后的判断分析.尝试使用了python logging模块. #-*- coding:utf-8 -*- import loggi ...

  4. jquery如何判断滚动条滚到页面底部并执行事件

    首先理解三个dom元素,分别是:clientHeight.offsetHeight.scrollTop. clientHeight:这个元素的高度,占用整个空间的高度,所以,如果一个div有滚动条,那 ...

  5. HDU-1799(组合递推公式)

    HDOJ-1799 - Fighting_Dream M - 暴力求解.打表 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Forma ...

  6. iOS自定义的UISwitch按钮

    UISwitch开关控件 开关代替了点选框.开关是到目前为止用起来最简单的控件,不过仍然可以作一定程度的定制化. 一.创建 UISwitch* mySwitch = [[ UISwitchalloc] ...

  7. Swift互用性:采用Cocoa设计模式(Swift 2.0版)-b

    本页包含内容: 委托(Delegation) 错误处理(Error Handling) 键值观察(Key-Value Observing) Target-Action模式(Target-Action) ...

  8. bzoj3574[Hnoi2014]抄卡组

    http://www.lydsy.com/JudgeOnline/problem.php?id=3574 我们发现如果所有的字符串都有*,那么只需要比较他们的“前缀”和“后缀”相同即可.“前缀”指第一 ...

  9. HTML父子页面通信问题(showModalDialog)

    1. showModalDialog参数说明 window.showModalDialog(URL, ARGS,Features)(在父窗口中调用打开新的窗口) URL          --  必选 ...

  10. 如何唯一确定一台iOS设备

    如果你的iOS应用需要针对设备做特定的操作,或者需要硬件的信息来进行判定等等的,你就需要对iOS设备进行唯一性的判定. 苹果设备有个先天的东西符合这个需求,UDID,这个东东用iTunes就可以看到, ...