今天晚上本来是做作业的。。。但是手痒又来敲了一题。。。作业当然就没做了。。。早知道晚上想打题还不如打CF。。然后就开始看这题了,一眼——智障模拟题嘛。。于是开始码码码。。。肯快就码玩了。。还手动除了几个样例,感觉很对啊,于是就叫了。。WA。。。WA。。。。还是WA。。。。。QAQ这评测机子有毒吧。。。当时我用的是这份代码(变态的我已经全部加了LL)
#include<cstdio>
#include<cstring>
typedef long long LL;
const LL N=200;
LL Q;
LL a[N],cnt;//二进制
LL mymax (LL x,LL y)
{
return x>y?x:y;
}
void change (LL x)//先将这个变为二进制
{
cnt=0;
while (x>0LL)
{
a[++cnt]=(x&1LL);
x>>=1LL;
}
return ;
}
void change1 (LL ooo)
{
for (LL u=mymax(0LL,cnt-ooo);u>=1LL;u--)
a[u]=a[u]^a[u+ooo];
}
LL bt ()
{
LL x=0;
for (LL u=1;u<=cnt;u++)
x=x+a[u]*(1LL<<(u-1LL));
return x;
}
int main()
{
/* printf("%d\n",1<<28);
freopen("a.in","r",stdin);*/
scanf("%lld",&Q);
while (Q--)
{
LL t;
scanf("%lld",&t);
t=t/((1LL<<16LL)+1LL);
change(t);
change1(11LL);
t=bt();
t=t/((1LL<<3LL)+1LL);
change(t);
change1(6LL);
t=bt();
t=t/((1LL<<10LL)+1LL);
printf("%lld\n",t);
}
return 0;
}
拿去对拍,数据出大了。。发现不一样 天真的我以为数据太大帮标称开了long long
然后排啊排,全对啊,感觉很棒棒。。
还是WA,严重怀疑评测机。。于
是去找了TYB大佬。。跪烂。。他和我说可能不能开long long,因为题目是unsigned int
蛤,还有这种操作,于是就发现自己已经错得一塌糊涂了QAQ最后看了下标称,思路都是一样的都是倒着模拟。
hash不注重定义类似害死人。。。。最后懒得写用了标称精神AC【捂脸】
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
unsigned int q,t,bin[35];
int main()
{
scanf("%u",&q);
bin[0]=1;
for (int i=1;i<=31;i++)
bin[i]=bin[i-1]*2;
while (q--)
{
scanf("%u",&t);
for (int i=0;i<=15;i++)
t-=((t/bin[i])&1)*bin[i+16];
for (int i=31;i>=11;i--)
t^=((t/bin[i])&1)*bin[i-11];
for (int i=0;i<=28;i++)
t-=((t/bin[i])&1)*bin[i+3];
for (int i=31;i>=6;i--)
t^=((t/bin[i])&1)*bin[i-6];
for (int i=0;i<=21;i++)
t-=((t/bin[i])&1)*bin[i+10];
printf("%u\n",t);
}
}
这题告诉我,1.一定要看清楚题 2.hash一定要注意类型