poj3349
2015-06-25 18:14
148 查看
先写哈希查找。
第一个方法,获取通过采取散列码,冲突管理由列表,这里是一个很好的方式与这种叙述性说明:/article/1968895.html
这里是关于这道题比較短小精悍的代码:/article/2141942.html
以下是我的代码:
第一个方法,获取通过采取散列码,冲突管理由列表,这里是一个很好的方式与这种叙述性说明:/article/1968895.html
这里是关于这道题比較短小精悍的代码:/article/2141942.html
以下是我的代码:
#include<iostream> #include<cstring> using namespace std; const int chushu=99991; int map[100010][7]; struct n1 { int i,sum; n1 *next; }; n1 hash[chushu+1]; inline void read(int &x) { scanf("%d",&x); } bool issame(int *a,int *b) { int i,j; for(i=0;i<6;i++) { for(j=0;j<6&&(a[j]==b[(j+i)%6]);j++) { if(j==5) return 1; } for(j=0;j<6&&(a[5-j]==b[(j+i)%6]);j++) { if(j==5) return 1; } } return 0; } bool insert(int sum,int i) { int key=sum%chushu; n1 *p=&hash[key]; for(;p->next!=0;p=p->next)//若指向节点没有后继,则此节点也没有储存不论什么数据 if(p->sum==sum&&issame(map[p->i],map[i])) return 1; p->next=new(n1); p->next->next=0; p->i=i; p->sum=sum; return 0; } int main() { int i,n,j,sum,flag; flag=1; read(n); memset(hash,0,sizeof(hash)); for(i=0;i<n;i++) { sum=0; for(j=0;j<6;j++) read(map[i][j]),sum+=map[i][j]; if(flag) if(insert(sum,i)) flag=0; } if(flag==0) printf("Twin snowflakes found.\n"); else printf("No two snowflakes are alike.\n"); }
相关文章推荐
- Oracle中RAC Failover 详解
- OJ——复数类--重载运算符+
- 面对层出不穷的新技术,如何保持百战百胜
- Redis 事务总结
- 深入理解Hash算法
- nginx学习笔记
- LOGSTASH+ELASTICSEARCH+KIBANA处理NGINX访问日志
- 得到插入时的自增主键ID值 LAST_INSERT_ID()
- IOS7 导航栏适配二
- XCUIElementQuery API
- 第十五周oj刷题——Problem N: C++习题 复数类--重载运算符3+
- 单例模式的七种写法
- Maven学习总结(一)——Maven入门
- Linux MySQL主从复制(Replication)配置
- mysql jdbc 版本问题
- 第14届军警狙击手世界杯:中国队包揽全部冠军
- redis学习笔记(1)
- LINUX RTC机制实现计时器类
- centos下top安装
- 百度移动搜索优化应该怎么做?