[HDU5968]异或密码
题目大意:
数据共\(T(T\le100)\)组。每组给定一个长度为\(n(n\le100)\)的非负整数序列\(A(A_i\le1024)\),\(m(m\le100)\)个询问,每个询问包含一个整数\(x_i(|x_i|\le1024)\)。求该序列的子区间异或和与\(x_i\)接近程度值最小的区间长度;若有多个区间的异或和与\(x_i\)的接近程度值相同,则回答最长的区间长度。
思路:
求前缀异或和之后暴力枚举区间端点即可。
源代码:
#include#include #include #include inline int getint() { register char ch; register bool neg=false; while(!isdigit(ch=getchar())) neg|=ch=='-'; register int x=ch^'0'; while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0'); return neg?-x:x;}const int N=101;int a[N];int main() { for(register int T=getint();T;T--) { const int n=getint(); for(register int i=1;i<=n;i++) { a[i]=a[i-1]^getint(); } const int m=getint(); for(register int i=0;i