poj 3349 (最小表示法)
开始按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 (最小表示法)的更多相关文章
- POJ 1509 最小表示法
题目链接:http://poj.org/problem?id=1509 题意:给定一个字符串,求一个起点使字符串从该起点起的字符串字典序最小[题目的字符串起点从1开始] 思路:最小表示法模板题 #de ...
- POJ 1635 树的最小表示法/HASH
题目链接:http://poj.org/problem?id=1635 题意:给定两个由01组成的串,0代表远离根,1代表接近根.相当于每个串对应一个有根的树.然后让你判断2个串构成的树是否是同构的. ...
- POJ 1509 Glass Beads【字符串最小表示法】
题目链接: http://poj.org/problem?id=1509 题意: 求循环字符串的最小表示. 分析: 浅析"最小表示法"思想在字符串循环同构问题中的应用 判断两字符串 ...
- UVA 719 / POJ 1509 Glass Beads (最小表示法/后缀自动机)
题目大意: 给出一个长度为N的字符串,求其字典序最小的循环同构. N<=10W. 算法讨论: 算法一.最小表示法.定义题. 算法二.后缀自动机. Codes: #include <iost ...
- POJ 3581 Sequence ——后缀数组 最小表示法
[题目分析] 一见到题目,就有了一个显而易见obviously的想法.只需要每次找到倒过来最小的那一个字符串翻转就可以了. 然而事情并不是这样的,比如说505023这样一个字符串,如果翻转了成为320 ...
- HDU 4162 Shape Number (最小表示法)
题意:给你一串n个数,求出循环来看一阶差的最小字典序:数字串看成一个顺时针的环,从某一点开始顺时针循环整个环,保证字典序最小就是答案 例如给你 2 1 3 就会得到(1-2+8 注意题意负数需要加8) ...
- HDU 2609 最小表示法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2609 题意:给定n个循环链[串],问有多少个本质不同的链[串](如果一个循环链可以通过找一个起点使得和 ...
- HDU 4162 最小表示法
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4162 题意:给定一个只有0-7数字组成的串.现在要由原串构造出一个新串,新串的构造方法:相邻2个位置的数字 ...
- UVA 1314 最小表示法
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36117 题意:给定长度为n的字符串,求一个起点使字符串从该起点起的 ...
随机推荐
- Nginx源码研究八:nginx监听socket实现流程
前面描述了nginx系统分析nginx的配置文件,初始化模块相关参数的过程,这里利用nginx监听socket的实现过程,做一次完整的回顾 1.首先,nginx启动的main函数中,会先初始化cycl ...
- JQuery调用iframe父页面元素与方法
JQuery操作iframe父页面与子页面的元素与方法 下面简单使用Jquery来操作iframe的一些记录,这个使用纯JS也可以实现. 第一.在iframe中查找父页面元素的方法: $('#id', ...
- jquery实现DIV层拖动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Azure IoT
微软Azure IoT 国外物联网平台初探(二)——微软Azure IoT 马智 平台定位 连接设备.其它 M2M 资产和人员,以便在业务和操作中更好地利用数据. 连接 IoT 设备 将所有设备连 ...
- HTML CSS简介与图片映射
1. CSS 入门 内联样式:在 HTML 元素中使用 “style” 属性,需要将表现与内容混在一起: 内部样式表:在 HTML 文档头部 <head> 区域使用 <style&g ...
- 点击Textbox 给日历控件赋值
1.前台代码: <asp:TextBox ID="TextBox1" runat="server" onfocus="return show() ...
- Node.js 安装 初体验(1)
1.安装nodejs http://nodejs.org/download/ 自动根据系统下载自己的版本node.js 2.环境变量 windows 安装,不需要配置环境变量 mac安装后,会提 ...
- H.264 Quantization
H.264 Quantizer 一般的量化器,可用下面的公式来表示: $Z=\pm \left \lfloor\frac{ \left | W \right | }{\bigtriangleup }\ ...
- linux crontab 计划任务 atd和windows下的计划任务
crontab 命令 如果发现您的系统里没有这个命令,请安装下面两个软件包. vixie-cron crontabs crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类 ...
- 树形dp-CF-337D. Book of Evil
题目链接: http://codeforces.com/problemset/problem/337/D 题目大意: 给一棵树,m个点,一个距离d,求有多少个点A,使得A到所有的m个点距离都不超过d. ...