A题
简单的贪心问题,首先把V从前向后每位都分配一个,剩下的V都是无用的了,然后考虑用I将剩下的没有V的位置填充,剩下的从前向后尽可能的分配给前面的位。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t;
int n,h,x,y;
int a[100010],b[100010];
ll ans,xi;
map<ll,int>q;
void solve()
{
scanf("%d%d",&n,&h);
ans = 0;
q.clear();
for(int i = 1;i <= n; ++i)
{
scanf("%lld",&xi);
ans ^= xi;
q[ans]++;
}
for(int i = 1;i < n; ++i) scanf("%d%d",&x,&y);
if(ans && q[ans] == 1) printf("NO\n");
else printf("YES\n");
}
int main()
{
scanf("%d",&t);
while(t--) solve();
return 0;
}
B题
万能hash解法嘿嘿嘿