1. 程式人生 > 實用技巧 >NOI前亂寫

NOI前亂寫

死了好久了

大概就是記錄考試

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];
inline 
void 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; }
View Code

T2 SBT

T3