CodeForces 842D Vitya and Strange Lesson
阿新 • • 發佈:2017-09-18
自然 http queue -- problems 最小 codeforce code mes
題目:http://codeforces.com/problemset/problem/842/D
題意:給你n個數,m次查詢,每次將數組全部異或一個數後,求沒出現過的最小自然數
要求異或後的最小值我們可以用字典樹來解決
而每次對數組異或可以替換每次對異或值異或
之後貪心的選取
每次都走左子樹,如果左子樹滿了,才走右子樹,這樣就能保證是最小
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> #include<set> using namespace std; int a[20][1<<19]; int main() { int n,m; scanf("%d%d",&n,&m); int x; for(int i=1;i<=n;i++) { scanf("%d",&x); if (!a[0][x])//去重 for(int j=0;j<20;j++) a[j][x>>j]++; } x=0; while(m--) { int y; scanf("%d",&y); x^=y; int ans=0; for(int i=19;i>=0;i--) if (a[i][(ans^x)>>i]==1<<i) ans|=1<<i;//左子樹滿了,走右子樹 printf("%d\n",ans); } return 0; }
CodeForces 842D Vitya and Strange Lesson