POJ3349 HASH
来源:互联网 发布:360软件强力卸载 编辑:程序博客网 时间:2024/05/01 04:49
给你n个六个数的序列,每一个序列代表一朵雪花,问这n个雪花中存不存相同的雪花,
若存在输出Twin snowflakes found.,否则输出No two snowflakes are alike.
import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.Arrays;import java.util.StringTokenizer;public class Main {public static void main(String args[]) {new Task().solve() ; }}class Task{InputReader in = new InputReader(System.in) ;PrintWriter out = new PrintWriter(System.out) ;final int N = 100008 ;final int Mod = 100007 ;class Node{int[] v ;int next ;Node(){v = new int[6] ;}}Node[] node = new Node[N<<1] ;int[] head = new int[Mod] ;int idx ;void add(int u , int[] v){node[idx] = new Node() ;System.arraycopy(v , 0 , node[idx].v , 0 , 6) ;node[idx].next = head[u] ;head[u] = idx++ ;}boolean find(int u , int[] v){for(int i = head[u] ; i != -1 ; i = node[i].next){Node now = node[i] ;boolean ex = true ;for(int j = 0 ; j < 6 ; j++){if(now.v[j] != v[j]){ ex = false ; break ; }}if(ex) return true ;}return false ;}void shift(int[] v){int t = v[0] ;for(int i = 0 ; i <= 4 ; i++)v[i] = v[i+1] ;v[5] = t ;}boolean exsit = false ;void doWork(int[] v){int u = 0 ; for(int i = 0 ; i < 6 ; i++){u += v[i] ;}u %= Mod ;for(int i = 0 ; i < 6 ; i++){if(find(u , v)){exsit = true ;return ;}shift(v) ;}add(u, v) ;for(int i = 0 ; i <= 2 ; i++){int t = v[i] ;v[i] = v[5-i] ;v[5-i] = t ;}add(u , v) ;}void solve(){Arrays.fill(head , -1) ;int n = in.nextInt() ;int[] v = new int[6] ;while(n-- > 0){for(int i = 0 ; i < 6 ; i++){v[i] = in.nextInt() ;}if(! exsit) doWork(v) ;}out.println(exsit ? "Twin snowflakes found." : "No two snowflakes are alike.") ;out.flush() ;}}class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = new StringTokenizer(""); } private void eat(String s) { tokenizer = new StringTokenizer(s); } public String nextLine() { try { return reader.readLine(); } catch (Exception e) { return null; } } public boolean hasNext() { while (!tokenizer.hasMoreTokens()) { String s = nextLine(); if (s == null) return false; eat(s); } return true; } public String next() { hasNext(); return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } public long nextLong() { return Long.parseLong(next()); } public double nextDouble() { return Double.parseDouble(next()); } public BigInteger nextBigInteger() { return new BigInteger(next()); } }
0 0
- poj3349-hash
- poj3349--Hash
- poj3349(Hash)
- POJ3349 HASH
- Hash练习题:【POJ3349】
- poj3349(hash)
- POJ3349【手写Hash】
- poj3349(数字hash)
- POJ3349 Snowflake Snow Snowflakes(hash)
- POJ3349 Snowflake Snow Snowflakes(hash)
- poj3349--Snowflake Snow Snowflakes(hash)
- poj3349 Snowflake Snow Snowflakes之hash入门
- POJ3349总结(第一次用hash解决问题)
- POJ3349-Snowflake Snow Snowflakes(hash表)
- poj3349
- poj3349
- POJ3349
- POJ3349
- 【HDU1269】迷宫城堡(tarjan)
- dbcp连接池配置
- Android L+ Theme 与 Toolbar 实例
- MongoDB中ObjectId生成规则参考
- 算法训练 结点选择
- POJ3349 HASH
- 华为机试在线训练-牛客网(27)无线OSS-高精度整数加法
- 为OpenStack而生的SDN控制器——OVN
- java之yield(),sleep(),wait()区别详解-备忘笔记
- JS判断鼠标单双击事件
- C++关键字(2)
- am 命令使用
- AES 加解密
- android-微信个人公众号