开始按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. Java学习----main详解

    public class Test1 { public static void main(String[] args) { System.out.println("Hello"); ...

  2. windows计划任务执行SQLserver脚本

    2016年3月1号,北京出差,documentbrowser系统改善上线. 其中有一个数据库表需要每天进行同步,原计划使用SQLServer的作业来执行又方便又快捷,但是客户的数据库是05的expre ...

  3. TP开发小技巧

    TP开发小技巧原文地址http://wp.chenyuanzhao.com/wp/2016/07/23/tp%E5%BC%80%E5%8F%91%E5%B0%8F%E6%8A%80%E5%B7%A7/ ...

  4. Yii 框架里数据库操作详解

    增:1 第一种 $post=new Post; $post->title='sample post'; $post->content='content for the sample pos ...

  5. 柯里化(Curing)

    柯里化:把接受多个参数的函数变换成接受单个参数的函数,并且返回准备接受余下参数,还能返回结果的一种技术. function currying(fn){ var args = Array.prototy ...

  6. WinPcap编程(三)

    1.过滤器设置 设置过滤器,得到你想要的哪种类型的包.Like WireShark. 过程:编译过滤器,然后设置过滤器.直接上参考文档的代码: if (d->addresses != NULL) ...

  7. mvc vs iis默认页面

    有时候,再iis里面设置了web的默认页面index.html 希望跳转到这个页面index.html默认页面 而 mvc则跳转到路由里面的设置页面 怎么忽略这个呢. 设置路由可能是个好办法,能实现 ...

  8. cf C. Divisible by Seven

    http://codeforces.com/contest/376/problem/C 题意:给你一个大数最多含有10^6个数字,这里面必须含有1,6,8,9,然后重新排列找出一个能被6整除的数. 思 ...

  9. DSP开发资源总结,经典书籍,论坛

    OMAP4开发资源总结: 一.TI OMAP4官网介绍: http://www.ti.com.cn/general/cn/docs/wtbu/wtbuproductcontent.tsp?templa ...

  10. COJ 2024 仙境传奇(五)——一个天才的觉醒 素数筛

    整理模板,同时测了一下memset,for,fill到底谁快... 结果:memset最快,其次是for,fill最慢QAQ.... #include<iostream> #include ...