思路:
数据小可以直接暴力枚举(以后看题得先看数据=。=!,不然看题时容易想复杂),把序列的每个连续序列的异或值都存进数组里,对每个询问直接暴力比较就好。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = 0x3f3f3f3f;
const ll INFF = 0x3f3f3f3f3f3f3f3f;
const ll mod = 1e9+7;
const int maxn = 1e5+7;
int a[110],b[110][110];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
memset(b,0,sizeof(b));
for(int i = 0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i = 1;i<=n;i++)
{
for(int j = 0;j<=n-i;j++)
{
for(int k = 0;k<i;k++)
{
b[i][j]^=a[j+k];
}
}
}
int m;
scanf("%d",&m);
ll minn = INFF;
while(m--)
{
int num;
minn = INFF;
scanf("%d",&num);
int l = 0;
for(int i = n;i>=1;i--)
{
for(int j = 0;j<=n-i;j++)
{
if((ll)abs(b[i][j]-num)<minn)
{
minn = (ll)abs(b[i][j]-num);
l = i;
}
}
}
printf("%d\n",l);
}
printf("\n");
}
return 0;
}