NOI前亂寫
阿新 • • 發佈:2020-08-02
死了好久了
大概就是記錄考試
7.19
考試的時候很RZ,T1以為自己秒切,但是偽地跟**一樣,大樣例也跟**一樣水,但是當時的我並沒有在意,直接去開T3了
T3剛了三個小時無果,快速補了一個T2的暴力。
結果T2加一個random_shuffle就有70分了,555,沒有信仰不行
T3也比較毒瘤。
T1 首先有一個東西是如果兩個相同的序列,答案是卡特蘭數,就是把它們看成括號,然後強制A的一定在B的前面,那就可以每個括號序列對應一個方案。
然後就考慮dp,$f[i][j]$表示匹配到i和j的方案然後考慮去重。
有一個東西是隻有每個極長相同的子段有意義,那麼就可以通過卡特蘭數來計算方案。
有一個要注意的地方是我們列舉的是最後一個完整括號,然後轉移,所以卡特蘭是第n-1項。。
T2 不是很懂,但是我勉強口胡。。。
有一個大神東西是對多項式差分,差分完當場扔掉最低項(差分點值),那我們差分掉低次的項然後就可以用KMP來找解了。。
T3 咕咕咕
又死了好久了
8.2
考試的時候太NT了,沒發現T2 rz題,而且T1&T2&T3 全掛了,無語了
T1 神仙構造,有這樣的一個構造方法:我們希望每個二進位制都被表示出來而且互不影響,有這樣一個構造:
#include<bits/stdc++.h> #define ll long long using namespace std; int n=1,m=0; int u[10006],v[10006]; inlineView Codevoid link(int a,int b){u[++m]=a,v[m]=b;} int main(){ freopen("password.in","r",stdin),freopen("password.out","w",stdout); ll c;cin>>c; while(c){ ++n,link(n,1); if(n>2) link(n-1,n); if(c&1) link(1,n); c>>=1; }cout<<n<<' '<<m<<endl;for(int i=1;i<=m;++i) cout<<v[i]<<' '<<u[i]<<endl; return 0; }
T2 SBT
T3