RT,关于第二个子任务,问什么循环展开写假了,悬关
#include<bits/stdc++.h>
using namespace std;
typedef unsigned int u32;
typedef unsigned long long u64;
int case_id;
inline u32 next_integer(u32 x) {
x ^= x << 13;
x ^= x >> 17;
x ^= x << 5;
return x;
}
bool output_arr(void *a, u32 size) {
if (size % 4) {
return puts("-1"), 0;
}
u32 blocks = size / 4;
u32 *A = (u32 *)a;
u32 ret = size;
u32 x = 23333333;
for (u32 i = 0; i < blocks; i++) {
ret = ret ^ (A[i] + x);
x^=x<<13;
x^=x>>17;
x^=x<<5;
}
return printf("%u\n", ret), 1;
}
namespace sorting{
const int NN=2e8+5;
u32 n,s,a[NN];
u32 base,maxv,cnt[4096],tmp[NN];
void main(){
cin>>n>>s;
a[0]=next_integer(s);
maxv=a[0];
for(int i=1;i<n;i=-~i){
a[i]=next_integer(a[i-1]);
maxv=max(maxv,a[i]);
}
base=4096;
u32 now=1;
u32 Up_base=base<<2,Up_n=n<<2;
while(maxv){
memset(cnt,0,Up_base);
for(int i=0;i<n;i=-~i) ++cnt[(a[i]/now)&4095];
for(int i=1;i<base;i=-~i) cnt[i]+=cnt[i-1];
for(int i=n-1;~i;--i){
int k=(a[i]/now)&4095;
tmp[cnt[k]-1]=a[i];
--cnt[k];
}
memcpy(a,tmp,Up_n);
now<<=12;
maxv>>=12;
}
output_arr(a,Up_n);
}
}
namespace game {
const int NN=3e5+5;
int n,q;
string l1,l2;
bitset<NN>stl1,pal1,ssl1,stl2,pal2,ssl2;
bitset<NN>st10,st20,pa10,pa20,ss10,ss20;
bitset<NN>st11,st21,pa11,pa21,ss11,ss21;
bitset<NN>st12,st22,pa12,pa22,ss12,ss22;
bitset<NN>st13,st23,pa13,pa23,ss13,ss23;
bitset<NN>st14,st24,pa14,pa24,ss14,ss24;
bitset<NN>st15,st25,pa15,pa25,ss15,ss25;
bitset<NN>st16,st26,pa16,pa26,ss16,ss26;
bitset<NN>st17,st27,pa17,pa27,ss17,ss27;
u32 b[NN],x[NN],y[NN],l[NN];
void main() {
cin>>n>>q;
cin>>l1>>l2;
stl1=pal1=ssl1=stl2=pal2=ssl2=0;
for(int i=0;i<n;i++){
if(l1[i]=='0'){
stl1[i]=1;
}else if(l1[i]=='1'){
ssl1[i]=1;
}else if(l1[i]=='2'){
pal1[i]=1;
}
}
for(int i=0;i<n;i++){
if(l2[i]=='0'){
stl2[i]=1;
}else if(l2[i]=='1'){
ssl2[i]=1;
}else if(l2[i]=='2'){
pal2[i]=1;
}
}
for(int i=0;i<q;i++){
cin>>x[i]>>y[i]>>l[i];
}
for(int i=0;i+8<=q;i+=8){
st10=stl1>>x[i];
st11=stl1>>x[i+1];
st12=stl1>>x[i+2];
st13=stl1>>x[i+3];
st14=stl1>>x[i+4];
st15=stl1>>x[i+5];
st16=stl1>>x[i+6];
st17=stl1>>x[i+7];
st10=st10^((st10>>l[i])<<l[i]);
st11=st11^((st11>>l[i+1])<<l[i+1]);
st12=st12^((st12>>l[i+2])<<l[i+2]);
st13=st13^((st13>>l[i+3])<<l[i+3]);
st14=st14^((st14>>l[i+4])<<l[i+4]);
st15=st15^((st15>>l[i+5])<<l[i+5]);
st16=st16^((st16>>l[i+6])<<l[i+6]);
st17=st17^((st17>>l[i+7])<<l[i+7]);
pa10=pal1>>x[i];
pa11=pal1>>x[i+1];
pa12=pal1>>x[i+2];
pa13=pal1>>x[i+3];
pa14=pal1>>x[i+4];
pa15=pal1>>x[i+5];
pa16=pal1>>x[i+6];
pa17=pal1>>x[i+7];
pa10=pa10^((pa10>>l[i])<<l[i]);
pa11=pa11^((pa11>>l[i+1])<<l[i+1]);
pa12=pa12^((pa12>>l[i+2])<<l[i+2]);
pa13=pa13^((pa13>>l[i+3])<<l[i+3]);
pa14=pa14^((pa14>>l[i+4])<<l[i+4]);
pa15=pa15^((pa15>>l[i+5])<<l[i+5]);
pa16=pa16^((pa16>>l[i+6])<<l[i+6]);
pa17=pa17^((pa17>>l[i+7])<<l[i+7]);
ss10=ssl1>>x[i];
ss11=ssl1>>x[i+1];
ss12=ssl1>>x[i+2];
ss13=ssl1>>x[i+3];
ss14=ssl1>>x[i+4];
ss15=ssl1>>x[i+5];
ss16=ssl1>>x[i+6];
ss17=ssl1>>x[i+7];
ss10=ss10^((ss10>>l[i])<<l[i]);
ss11=ss11^((ss11>>l[i+1])<<l[i+1]);
ss12=ss12^((ss12>>l[i+2])<<l[i+2]);
ss13=ss13^((ss13>>l[i+3])<<l[i+3]);
ss14=ss14^((ss14>>l[i+4])<<l[i+4]);
ss15=ss15^((ss15>>l[i+5])<<l[i+5]);
ss16=ss16^((ss16>>l[i+6])<<l[i+6]);
ss17=ss17^((ss17>>l[i+7])<<l[i+7]);
st20=stl2>>y[i];
st21=stl2>>y[i+1];
st22=stl2>>y[i+2];
st23=stl2>>y[i+3];
st24=stl2>>y[i+4];
st25=stl2>>y[i+5];
st26=stl2>>y[i+6];
st27=stl2>>y[i+7];
st20=st20^((st20>>l[i])<<l[i]);
st21=st21^((st21>>l[i+1])<<l[i+1]);
st22=st22^((st22>>l[i+2])<<l[i+2]);
st23=st23^((st23>>l[i+3])<<l[i+3]);
st24=st24^((st24>>l[i+4])<<l[i+4]);
st25=st25^((st25>>l[i+5])<<l[i+5]);
st26=st26^((st26>>l[i+6])<<l[i+6]);
st27=st27^((st27>>l[i+7])<<l[i+7]);
pa20=pal2>>y[i];
pa21=pal2>>y[i+1];
pa22=pal2>>y[i+2];
ss22=ssl2>>y[i+2];
pa23=pal2>>y[i+3];
pa24=pal2>>y[i+4];
pa25=pal2>>y[i+5];
pa26=pal2>>y[i+6];
pa27=pal2>>y[i+7];
pa20=pa20^((pa20>>l[i])<<l[i]);
pa21=pa21^((pa21>>l[i+1])<<l[i+1]);
pa22=pa22^((pa22>>l[i+2])<<l[i+2]);
pa23=pa23^((pa23>>l[i+3])<<l[i+3]);
pa24=pa24^((pa24>>l[i+4])<<l[i+4]);
pa25=pa25^((pa25>>l[i+5])<<l[i+5]);
pa26=pa26^((pa26>>l[i+6])<<l[i+6]);
pa27=pa27^((pa27>>l[i+7])<<l[i+7]);
ss20=ssl2>>y[i];
ss21=ssl2>>y[i+1];
ss22=ssl2>>y[i+2];
ss23=ssl2>>y[i+3];
ss24=ssl2>>y[i+4];
ss25=ssl2>>y[i+5];
ss26=ssl2>>y[i+6];
ss27=ssl2>>y[i+7];
ss20=ss20^((ss20>>l[i])<<l[i]);
ss21=ss21^((ss21>>l[i+1])<<l[i+1]);
ss22=ss22^((ss22>>l[i+2])<<l[i+2]);
ss23=ss23^((ss23>>l[i+3])<<l[i+3]);
ss24=ss24^((ss24>>l[i+4])<<l[i+4]);
ss25=ss25^((ss25>>l[i+5])<<l[i+5]);
ss26=ss26^((ss26>>l[i+6])<<l[i+6]);
ss27=ss27^((ss27>>l[i+7])<<l[i+7]);
b[i]+=(st10&ss20).count();
b[i+1]+=(st11&ss21).count();
b[i+2]+=(st12&ss22).count();
b[i+3]+=(st13&ss23).count();
b[i+4]+=(st14&ss24).count();
b[i+5]+=(st15&ss25).count();
b[i+6]+=(st16&ss26).count();
b[i+7]+=(st17&ss27).count();
b[i]+=(ss10&pa20).count();
b[i+1]+=(ss11&pa21).count();
b[i+2]+=(ss12&pa22).count();
b[i+3]+=(ss13&pa23).count();
b[i+4]+=(ss14&pa24).count();
b[i+5]+=(ss15&pa25).count();
b[i+6]+=(ss16&pa26).count();
b[i+7]+=(ss17&pa27).count();
b[i]+=(pa10&st20).count();
b[i+1]+=(pa11&st21).count();
b[i+2]+=(pa12&st22).count();
b[i+3]+=(pa13&st23).count();
b[i+4]+=(pa14&st24).count();
b[i+5]+=(pa15&st25).count();
b[i+6]+=(pa16&st26).count();
b[i+7]+=(pa17&st27).count();
}
int qq;
qq=(q/8)*8;
while(qq<q){
st10=stl1>>x[qq];
st10=st10^((st10>>l[qq])<<l[qq]);
pa10=pal1>>x[qq];
pa10=pa10^((pa10>>l[qq])<<l[qq]);
ss10=ssl1>>x[qq];
ss10=ss10^((ss10>>l[qq])<<l[qq]);
st20=stl2>>y[qq];
st20=st20^((st20>>l[qq])<<l[qq]);
pa20=pal2>>y[qq];
pa20=pa20^((pa20>>l[qq])<<l[qq]);
ss20=ssl2>>y[qq];
ss20=ss20^((ss20>>l[qq])<<l[qq]);
b[qq]+=(st10&ss20).count();
b[qq]+=(ss10&pa20).count();
b[qq]+=(pa10&st20).count();
++qq;
}
// for(int i=0;i<q;i++){
// cout<<b[i]<<'\n';
// }
output_arr(b,q*4);
}
}
int main(){
// freopen("challenge.in","r",stdin);
// double st=clock();
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>case_id;
if(case_id==1){
sorting::main();
}else if(case_id==2){
game::main();
// cout<<(clock()-st)<<'\n';
}else{
}
return 0;
}