bzoj4917: Hash Killer IV

来源:互联网 发布:淘宝刷好评多少钱一个 编辑:程序博客网 时间:2024/05/22 08:22

被4933折磨的意识模糊,看到OZY神犇做过这题。。

标签:模拟!!!

开心的去做!!然而又是什么玄学的数学方法!!
统称:倒着模拟。
因为二进制的某些位在有些操作后是不变的。so可以get到这几个位。

#include<cmath>#include<cstdio>  #include<cstdlib>#include<cstring>  #include<iostream>#include<algorithm>using namespace std;unsigned int er[50];int main(){    unsigned int T,x;    scanf("%u",&T);    er[0]=1;for(int i=1;i<=31;i++)er[i]=er[i-1]*2;    while(T--)    {        scanf("%u",&x);        for(int i=0;i<=15;i++)x-=((x/er[i])&1)*er[i+16];        for(int i=31;i>=11;i--)x^=((x/er[i])&1)*er[i-11];        for(int i=0;i<=28;i++)x-=((x/er[i])&1)*er[i+3];        for(int i=31;i>=6;i--)x^=((x/er[i])&1)*er[i-6];         for(int i=0;i<=21;i++)x-=((x/er[i])&1)*er[i+10];        printf("%u\n",x);    }    return 0;}
原创粉丝点击