省選模擬 zero4338

2022-09-23 00:12:24 字數 1616 閱讀 1111

似乎又是挺簡單的一場??戰神的良心題!!

考場上完全沒有思考第一題的性質,導致啥也不會到九點

第二題看完之後認為是dp套dp後來發現可以爆搜

第三題似乎是暴力hash就行,也是找性質題

主要是自己的思維量不夠,啥性質也找不到。。。

如果想要判斷乙個數x是否可行,就是判斷所有\(a[i]&x==x\)的數能否將整個序列分成k段並且作為這k段的最大值出現

我們先不考慮判斷的方法,如果我們可以判斷了,那麼就直接按位確定就行了

發現如果區間數量多於k,那麼直接合併兩個區間答案只會大不會小

所以實際上我們找的就是最大區間劃分數,可以用線段樹暴力做,也可以根據每乙個數是劃分到自己這裡,還是前乙個合法的或者後乙個合法的

ac_code#includeusing namespace std;

#define fo(i,x,y) for(int i=(x);i<=(y);i++)

#define fu(i,x,y) for(int i=(x);i>=(y);i--)

int read()

while(isdigit(ch))

return s*t;

}const int n=2e5+5;

int n,k,a[n],ans;

int ml[n],mr[n],sta[n],top;

int pre[n],nxt[n],f[n];

bool check(int x)

signed main()

while(isdigit(ch))

return s*t;

}const int n=10;

const int mod=1e9+7;

int ksm(int x,int y)return ret;

}int n,a[n],ans;

int su[n],so[n],xl[n],b[n],fas;

bool com(int x,int y)

mapmp;int ys[n];

int c(int x,int y)

ji[x]=b[x];dfs_fas(x+1);

}int f[n],fmx,sum;

bool vis[1<<20];

int lsh[n],lh;

void dfs_sort(int x)

while(isdigit(ch))

return s*t;

}const int n=2e5+5;

const ull bas=10;

const ll mod=1000000007;

const ll mob=998244353;

const ll moa=998244354;

char chs[n],cht[n];int pp[n*2],lp;

int ls,lt,ss[n],st[n],z[n*2];

ull ba[n],hs[n],ht[n];

ll ca[n],cs[n],ct[n];

ll da[n],ds[n],dt[n];

ll aa[n],as[n],at[n];

bool ck(int l1,int r1,int l2,int r2)

signed main()

cerr<

省選模擬 19 09 11

ps.博主趁資訊課摸魚考的暴零模擬 看門人憑感覺就知道是長鏈剖分,將路徑查分一下,dis u di sv 2 dis lc adis u dis v 2 dis disu disv 2 disl ca 維護fu,if fu,i 表示u的子樹,深度為 i 的點的 dis disdi s最大值 考慮如何...

省選模擬96

容易發現當 k 3 時無解。然後容易證明當 k 3 時,只有 m 3 才是有解的。然後直接做不好做,考慮欽定然後容斥出合法方案。對於 k 3 列舉乙個點,然後計算另乙個的方案數。其他情況類似,欽定滿足條件的角,然後容斥。然後對於每乙個 o n 的式子用組合恒等式大力化簡就可以做到 o 1 了。考慮每...

省選模擬86

首先考慮基礎的dp定義,那麼發現轉移需要的係數只和dp是奇數的點的個數有關,所以將這個東西記錄在dp狀態中就行了。然後推一下dp轉移,發現轉移係數和奇數的點的個數沒有關係,只與是否存在這樣的點有關,所以用01來記錄就可以了。考慮用總方案減去不合法的方案,也就是1號點能到達的點和2號點能到達的點沒有交...