C - 异或密码 HDU - 5968

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
//枚举所有区间的异或,然后每次比较就可以了
using namespace std;
int num[109];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,m;
        scanf("%d",&n);
        for(int i=0; i<n; i++)
            scanf("%d",&num[i]);
        scanf("%d",&m);
        int ai;
        int t1,t2,t;
        t=t1=t2=0;
        for(int i=0; i<m; i++)
        {
            scanf("%d",&ai);
            t=999999999;
            t2=0;
            for(int j=0; j<n; j++)
            {
                t1=num[j];
                for(int k=j; k<n; k++)
                {if(k!=j)
                    t1=t1^num[k];
                    if(t>abs(t1-ai))
                    {
                        t=abs(t1-ai);
                        t2=k-j+1;
                    }
                    else if(t==abs(t1-ai)&&t2<k-j+1)
                        t2=k-j+1;
                }
            }
            printf("%d\n",t2);
        }
        printf("\n");


    }

return 0;
}
 

猜你喜欢

转载自blog.csdn.net/zhangzhenjunaixuxin/article/details/81459305