【BZOJ4917】Hash Killer IV 乱搞
2024-10-21 07:45:15
【BZOJ4917】Hash Killer IV
Description
有一天,tangjz造了一个Hash函数:
unsigned int Hash(unsigned int v){
unsigned int t = v;
t = t + (t << 10);
t = t ^ (t >> 6);
t = t + (t << 3);
t = t ^ (t >> 11);
t = t + (t << 16);
return t;
}
小Q发现这个函数非常不靠谱,对于任意的t,他可以随手构出个数字v使得Hash(v)=t。
小Q现在想考考你,他将给出Q个t,你需要构造出满足条件的v。
Input
第一行包含一个正整数Q(1<=Q<=100000),表示询问的个数。
接下来Q行,每行一个整数t(0<=t<2^32),表示询问的t。
输入数据保证对于每个t至少存在一组解。
Output
对于每组数据输出一行一个整数,即合法的v,若有多组可行解,输出任意一组。
Sample Input
4
614278301
1228622139
1841720774
2457244278
614278301
1228622139
1841720774
2457244278
Sample Output
1
2
3
4
2
3
4
题解:发现每个操作都是能反过来的。对于操作1,3,5,可以看成是原数*一个数,因为乘的是奇数而模数是偶数,所以反过来做的话直接乘逆元就行了。对于2,4操作,首先最高的6/11位是不受影响的,然后依次确定后面的位即可。
#include <cstdio>
typedef unsigned int ui;
ui ans,x;
inline ui work(ui x,int y)
{
for(int i=31-y;i>=0;i--) x^=((x&(1u<<(i+y)))>>y);
return x;
}
int main()
{
int T; scanf("%d",&T);
while(T--) scanf("%u",&ans),ans*=4294901761u,ans=work(ans,11),ans*=954437177u,ans=work(ans,6),ans*=3222273025u,printf("%u\n",ans);
return 0;
}
最新文章
- docker通过iptables修改或新增镜像映射端口
- trigger() --工作中问题nav样式
- jQuery延迟加载插件(Lazy Load)详解
- 见证历史 -- 2013 NBA 热火夺冠之路有感
- FZU 2219 StarCraft(星际争霸)
- 深入了解 Dojo 的服务器推送技术
- jquery如何获取url中问号后面的数值
- UIButton 之 按下高亮
- MongoDB可视化工具--Robo 3T 使用教程
- Git revert及其他一些回退操作
- SQL Server优化查询
- [转]什么是C++虚函数、虚函数的作用和使用方法
- SpringBoot------全局异常捕获
- 优云亮相GOPS2017全球运维大会 “黑科技”获全场最高关注
- mysql 如何选择随机行
- abp+angular+bootstrap-table的使用
- USACO 6.5 Checker Challenge
- Java8新特性之重复注解(repeating annotations)浅析
- Unity Remote 5 使用
- Go语言最佳实践——通道和并发
热门文章
- css - 小程序样式
- javascript - 闭包之一些常见的写法
- .Net之路(十五)图解LoadRunner压力測试
- 通过ngxtop实时监控webserver的访问情况 / 解决ImportError: No module named _sqlite3问题
- Python 实现的猫脸识别、人脸识别器。
- JPA联合主键@EmbeddedId使用详解附查询例子
- 服务器上使用matplotlib.pyplot绘图
- Asp.net 数据库依赖那些事
- 李洪强漫谈iOS开发[C语言-002]-开发概述程序的本质与简单执行过程
- wb标准