开始按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. Automatically watermark all uploaded photos (给所有上传的相片加水印)

    Hello, This mod automatically watermark all uploaded photos. Price: FREE, enjoy. You will have to ed ...

  2. Linux 下安装Python框架django建立与mysql的连接

    0.基本环境说明: a. Ubuntu 14.04 64bit b. python 2.7.6 c. django 1.8 d. django-registration e. django-widge ...

  3. Tomcat中配置多个端口

    在tomcat的conf/server.xml中,配置多个端口,如下: <?xml version="1.0"?> <!--应用1,端口port="80 ...

  4. .Net 4.5 Task

    Task 是 .Net4.0 新出的异步调用方法,粗略看了一下基本对外屏蔽了线程的概念,写异步调用更专注于应用本身. public class Program { static void Main(s ...

  5. 【JavaScript】JavaScript教程之------------------JavaScript实现

    JavaScript的核心ECMAScript描述了该语言的语法与基本对象: DOM描述了处理网页内容的方法和接口: BOM描述了与浏览器进行交互的方法和接口: 完整的JavaScript实现是由以下 ...

  6. NTOPNG修改密码

    感觉这个有点妖,因为在两个实例上修改密码都失败了. 于是,从网上看看是怎么回事, 按以下步骤重置你想要的密码: 1,为密码生成MD5字串: echo -n "your_password&qu ...

  7. C51-keil编译常见错误和警告处理53

    keil错误:C51编译器识别错类型有三种:1.致命错误:伪指令控制行有错,访问不存在的原文:2.语法及语义错误:语法和语义错误都发生在原文件:3.警告:警告出现并不影响目标文件的产生,但执行:C_5 ...

  8. 程序自动生成Dump文件()

    前言:通过drwtsn32.NTSD.CDB等调试工具生成Dump文件, drwtsn32存在的缺点虽然NTSD.CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD.CDB等调试工具.了解了 ...

  9. 如何让窗口控件半透明(控件在Paint自己时,首先向主窗口询问,获取主窗口上控件所在区域的背景图)

    在网上关于窗口视觉效果,有2个问题被问得最多:第一个是如何让窗口边框有阴影效果?第二个是如何让窗口控件有半透明效果? 对于第一个问题,我们的答案是用双层窗口模拟或是用Layered Window.在X ...

  10. 【用PS3手柄在安卓设备上玩游戏系列】FC(任天堂NES/FC主机)模拟器

    NESoid 是安卓系统下公认最好的FC模拟器.据我所知,现在安卓系统下面的绝大部分的FC模拟器,都是基于 NESoid 的内核来开发的. 官方网站:http://www.nesoid.com NES ...