http://acm.hdu.edu.cn/showproblem.php?pid=5968
因为长度只有100,那么就可以先暴力预处理所有长度的异或和
记录结果和长度即可。
#include<bits/stdc++.h>
using namespace std;
struct node{
int ans;
int l;
}p[11111];
int main(){
int t;
cin>>t;
while(t--)
{
int n,m;
int a[1111];
int js=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
p[js].ans=a[i];
p[js++].l=1;
for(int j=i+1;j<n;j++)
{
p[js].ans=a[j]^p[js-1].ans;
p[js++].l=j-i+1;
}
}
cin>>m;
int x;
while(m--)
{
cin>>x;
int an=10255;
int id=0;
for(int i=0;i<js;i++)
{
if(abs(p[i].ans-x)<an)
{
an=abs(p[i].ans-x);
id=p[i].l;
}
else if(abs(p[i].ans-x)==an)
{
id=max(id,p[i].l);
}
}
cout<<id<<endl;
}
cout<<endl;
}
return 0;
}