思路来自题解和一些博客

最麻烦的是样例没啥用- -

/*
HDU 6046 - hash [ hash,鸽巢 ] | 2017 Multi-University Training Contest 2
题意:
给出一个1e3*1e3的矩阵以及 一个 生成1e6*1e6的矩阵的随机函数
在1e6*1e6的矩阵中找到1e3*1e3的矩阵的位置
分析:
将1e3*1e3的矩阵每一个位置压入哈希表中,哈希值为其与之后63位所组成64位的值(不满64位就不压入)
由于 2^64 远大于 1e12 故可认为哈希值相同的是同一个位置
枚举大矩阵中的位置,若能在哈希表中找到这个位置的哈希值,则小矩阵头部的相对位置可以确定
但不需要枚举大矩阵中的每个位置,可以每隔1000行,隔900列枚举一个位置
这样根据鸽巢原理,枚举的这些位置至少有一个被小矩阵覆盖 选隔900列而不是1000列的原因是 小矩阵每行最右端63个点没被压入哈希表,所以哈希表中的矩阵是 1000 * (1000-63)的
*/
#include <bits/stdc++.h>
using namespace std;
#define LL unsigned long long
const int N = 1e3+5;
const int L = 1000;
const int ZIP = 64;
inline unsigned sfr(unsigned h, unsigned x) {
return h >> x;
}
int f(LL i, LL j) {
LL w = i * 1000000ll + j;
int h = 0;
for (int k = 0; k < 5; ++k) {
h += (int) ((w >> (8 * k)) & 255);
h += (h << 10);
h ^= sfr(h, 6);
}
h += h << 3;
h ^= sfr(h, 11);
h += h << 15;
return sfr(h, 27) & 1;
}
namespace HashMap{
const int MOD = 1313131;
struct Node {
LL pos, val;
int nxt;
}node[N*N];
int head[MOD], tot;
void init() {
memset(head, 0, sizeof(head));
tot = 0;
}
void insert(LL v, LL p) {
int t = v % MOD; tot++;
node[tot].pos = p;
node[tot].val = v;
node[tot].nxt = head[t];
head[t] = tot;
}
LL find(LL v) {
for (int i = head[v%MOD]; i; i = node[i].nxt)
if (node[i].val == v) return node[i].pos;
return 0;
}
}
char s[N];
LL hs[N];
int main()
{
int t; scanf("%d", &t);
for (int tt = 1; tt <= t; tt++)
{
HashMap::init();
for (int i = 1; i <= L; i++)
{
scanf("%s", s+1);
hs[L+1] = 0;
for (int j = L; j >= 1; j--)
hs[j] = hs[j+1]<<1|(s[j]-'0');
for (int j = 1; j <= L-ZIP+1; j++)
HashMap::insert(hs[j], i*1024+j);
}
LL ans = 0; int x, y;
for (int i = 1; i <= 1e6 && (!ans); i += 1000)
for (int j = 1; j <= 1e6 && (!ans); j += 900)
{
if (j+ZIP-1 > 1e6) continue;
LL val = 0;
for (int k = ZIP-1; k >= 0; k--)
val = val<<1|(f(i,j+k));
ans = HashMap::find(val);
if (ans != 0) x = i, y = j;
}
int px = x - ans / 1024 + 1, py = y - ans % 1024 + 1;
printf("Case #%d :%d %d\n", tt, px, py);
}
}

  

HDU 6046 - hash | 2017 Multi-University Training Contest 2的更多相关文章

  1. hdu 6046 hash

    题: OwO http://acm.hdu.edu.cn/showproblem.php?pid=6046 (2017 Multi-University Training Contest - Team ...

  2. hdu 4930 Fighting the Landlords--2014 Multi-University Training Contest 6

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 Fighting the Landlords Time Limit: 2000/1000 MS ...

  3. HDU 6168 - Numbers | 2017 ZJUT Multi-University Training 9

    /* HDU 6168 - Numbers [ 思维 ] | 2017 ZJUT Multi-University Training 9 题意: .... 分析: 全放入multiset 从小到大,慢 ...

  4. HDU 5726 GCD (2016 Multi-University Training Contest 1)

      Time Limit: 5000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Description Give y ...

  5. HDU 5360 Hiking(优先队列)2015 Multi-University Training Contest 6

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  6. HDU OJ 4334 Trouble 2012 Multi-University Training Contest 4

    题目:click here 题意: 给定5组数据,每组数据选择一个数,看是否能找到5个数的和为零. 分析: 千万不要~~T~~ 普通线性查找: #include <iostream> #i ...

  7. hdu 6394 Tree (2018 Multi-University Training Contest 7 1009) (树分块+倍增)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=6394 思路:用dfs序处理下树,在用分块,我们只需要维护当前这个点要跳出这个块需要的步数和他跳出这个块去 ...

  8. HDU 4951 Multiplication table(2014 Multi-University Training Contest 8)

    思路   如果进制为p    那么当x<p时 (p-1)*(p-x)=(p-(x+1))  *p +x     因为x<p  所以没有进位  所以高位上的数字为    p-(x+1). 根 ...

  9. HDU 4938 Seeing People(2014 Multi-University Training Contest 7)

    思路:根据出发时间把点往速度反方向移动 t*v的 的距离这样就可以当成 全部点一起出发,再把y轴上的点固定不动相当于x轴的点向(-v2,v1)方向移动 .可以把所有点映射到x轴上进行统计即可(要记住同 ...

随机推荐

  1. [转帖]Windows安全认证是如何进行的?[Kerberos篇]

    Windows安全认证是如何进行的?[Kerberos篇] NTLM 的简单看了一下 基本上了解了.. 这个KERBEROS 的看不太懂 感觉说的我也有点迷糊.. 虽然是对称加密的 但是不清不楚的.. ...

  2. bat命令教程

    转自:https://www.jb51.net/article/151923.htm 第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合 ...

  3. [转帖]Linux systemd 常用命令

    Linux systemd 常用命令 https://www.cnblogs.com/tsdxdx/p/7288490.html systemctl hostnamectl timedatectl l ...

  4. SpringBoot 项目如何在tomcat容器中运行

    一. SpringBoot内嵌容器的部署方式 SpringBoot内部默认提供内嵌的tomcat容器,所以可以直接打成jar包,丢到服务器上的任何一个目录,然后在当前目录下执行java -jar de ...

  5. java http接口请求响应 request response

    接口类: 1 package org.sunshine.dcda.epg.wechat.controller.niao; 2 3 import javax.servlet.http.HttpServl ...

  6. Kubernetes---网络通讯模式笔记

    ⒈kubernetes网络通讯模式     Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在GCE(Google Compute Engine)里面是现成的网 ...

  7. MySQL8.0哪些新特性你最期待

    1.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe,metadata管理更完善 2.快速在线加新列(腾讯互娱DBA团队贡献) 3.并行redo log,并提升redo l ...

  8. 贝叶斯优化 Bayesian Optimization

    贝叶斯优化 Bayesian Optimization 2018年07月02日 22:28:06 余生最年轻 阅读数 4821更多 分类专栏: 机器学习   版权声明:本文为博主原创文章,遵循CC 4 ...

  9. python经典小程序集锦(一) 实现九九乘法表

    本篇文章主要是收集整理一些小程序以供大家娱乐,或者是在面试的时候使用到.文章会持续更新,希望大家收藏关注哦. 1.代码实现过程 for i in range(1, 10): for j in rang ...

  10. HTTP协议探究(一):缓存

    一 复习与目标 1 复习 序章主要用WrieShark抓包HTTP报文 复习了TCP协议 讲述了TCP协议与HTTP之间的关系 HTTP1.1更新原因:HTTP1.0一次TCP连接只能发送一次HTTP ...