题解 | H-小L的数组
小L的数组
https://ac.nowcoder.com/acm/contest/120566/H
核心思路
可开两个unordered_set数组,分别记录上一轮出现过的x即(这轮可用的x)和这轮新出现的x(下一轮将用到的),最后遍历最后一轮出现过的x,输出最大值即可。
代码如下
```#include<bits/stdc++.h>
using namespace std;
#define int long long
int fun1(int x,int a)
{
if(x-a>0)
return x-a;
else
return 0;
}
int fun2(int x,int b)
{
return x^b;
}
signed main()
{
int n,x=0;
cin>>n;
vector<int> A(n+2);
vector<int> B(n+2);
for(int i=1;i<=n;i++)
cin>>A[i];
for(int i=1;i<=n;i++)
cin>>B[i];
unordered_set<int> l;
l.insert(x);
for(int i=1;i<=n;i++)
{
unordered_set<int> nxt;
for(auto &exe:l)
{
int f1,f2;
f1=fun1(exe,A[i]);
f2=fun2(exe,B[i]);
nxt.insert(f1);
nxt.insert(f2);
}
l=nxt;
}
for(int i=2048;i>=0;i--)
if(l.count(i))
{
cout<<i<<"\n";
break;
}
}