csp-s模擬測試86

A. 異或

上來先把除了2^k-1的部分分打滿了,寫的時候也一直不能集中精力,狀態很迷,而後就進了T2ide

最後10min回來寫2^k-1,而後寫着寫着想出了正解。。。而後就沒了。。。ui

通常套路:按位考慮spa

若是固定一個數x屬於[L,R],而後統計出[L,R]內每位上1的個數就能夠分類按位計算答案。code

發現不須要知道x具體是誰,我只須要知道全部的x(一塊兒考慮)的01分佈。blog

假設考慮到第i位:event

1.當該位爲1,能和該位爲0的造成1<<i的貢獻class

2.當該位爲0,能和該位爲1的造成1<<i貢獻cli

如今只要快速求出[L,R]內每位上1的個數。sed

%mzz,發現每一位上的01是有循環節的,節長爲1<<i+1循環

求出R、L的前綴桶再相減。

 

B. 取石子

20分鐘寫完記搜就交了,也沒有對拍,試了下極限數據跑的飛快,也沒有從中發現問題。

而後就爆零了,輕敵我活該。

 1 int dfs(int a,int b,int c)
 2 {
 3     if(~f[a][b][c])return f[a][b][c];
 4     if(!a&&!b&&!c)return 0;
 5     if(a&&b&&c){
 6         int lim=min(a,min(b,c));
 7         F(i,1,lim)if(!dfs(a-i,b-i,c-i))return f[a][b][c]=1;
 8     }
 9     if(a&&b&&!c){
10         int lim=min(a,b);
11         F(i,1,lim)if(!dfs(a-i,b-i,c))return f[a][b][c]=1;
12     }
13     if(a&&!b&&c){
14         int lim=min(a,c);
15         F(i,1,lim)if(!dfs(a-i,b,c-i))return f[a][b][c]=1;
16     }
17     if(!a&&b&&c){
18         int lim=min(b,c);
19         F(i,1,lim)if(!dfs(a,b-i,c-i))return f[a][b][c]=1;
20     }
21     if(a&&!b&&!c){
22         F(i,1,a)if(!dfs(a-i,b,c))return f[a][b][c]=1;
23     }
24     if(!a&&b&&!c){
25         F(i,1,b)if(!dfs(a,b-i,c))return f[a][b][c]=1;
26     }
27     if(!a&&!b&&c){
28         F(i,1,c)if(!dfs(a,b,c-i))return f[a][b][c]=1;
29     }
30     return f[a][b][c]=0;
31 }
十分智障

後面if進不去,腦抽。

 

shu ru fa zha le orz

相關文章
相關標籤/搜索