以下的數均已轉為二進位制數
and:貪心,從高位往低位,如果集合裡的數有這一位的個數小於2,說明答案裡不可能包含這一位,繼續做下一位的操作;如果個數大於2,顯然取有這一位的數會比其他數更優,把其他數從集合中刪除。xor:貪心,建一棵字典樹,同樣是盡量使高位為1
or:遞推,設f[x](x為壓縮狀態)為是否有數包含x集合,顯然對於f[x]=true有f[y](y為x的子集)=true,那麼我們就可以從大到小遞推,每個狀態只要更新比它少乙個1的狀態就可以了(ps:我的程式裡f陣列順便記錄了權值,與此處略有不同)
#include#include#include#include#includeusing namespace std;
const int n=1e5+1,m=2100001;
int t,n,m,c,l,l,t,sum,ans,i,j,k,a[n],ls[m],rs[m],f[m],ex[21];
bool cmp(int x,int y)
void add(int x,int y,int b)
else }
void find(int x,int y,int b)
else if (ls[x]) find(ls[x],y,b-1);
} else
else if (rs[x]) find(rs[x],y,b-1); }}
int main()
l=ex[l+1]-1;
ans=0;
if (c==1)
printf("%d\n",a[1]&a[2]);
}if (c==2)
for (i=1;i<=m;i++) ls[i]=rs[i]=0;
printf("%d\n",ans);
}if (c==3)
}for (i=1;i
GDOI2017模擬8 12 躲藏
給出乙個n m的網格圖,圖中有一些障礙節點。現在有a個男生和b個女生,還有乙個小標。男生要和女生配對,小標可以和任何乙個人配對。每一對cp 霧 只能待在乙個點。乙個點只能有一對cp。現在給出a b 1個人的初始座標,和他們的移動速度 即移動到4相鄰格仔所需的時間 所有人同時移動,求完成配對的最小時間...
GDOI2017模擬8 12 新車
平面上有乙個數軸,e點為目標點。你現在要開 車從w前往e,每移動1格需要1l油。你的油箱容量為s,初始時裝滿了98 汽油。數軸上有n個加油站,每個加油站提供98 95 92 中的一種。到了加油站你可以選擇加任意數量的油,你的油箱是茲瓷所有油甚至混合油的。你認為98 最吼,95 其次,92 跑的最慢。...
GDOI2017模擬11 5 總結
看到第一題,哇,數論題,不會啊,感覺要跪 正當我迷茫的時候,突然機房斷電了。啪的一聲大家的電腦都黑了!不知所措!沒辦法,只好等等。過了10分鐘左右,來電了,重新看了看第一題,也許是冷靜下來了,發現直接暴力分解質因數就能過!繼續看第二題,在草稿紙上推了一下,要用揹包,一開始以為會超時,但仔細想了想發現...