2021 2 27模擬賽總結

2022-06-03 09:12:10 字數 2908 閱讀 4466

開場看a,想了一會發現是個簡單的資料結構題。

但是要寫個分塊+半平面交。

由於以前模擬賽場上寫分塊+半平面交寫整場獲得0分的好成績的教訓,所以想了一會怎麼轉成凸包。

看b後一會想出了80分做法。

然後想了一會100分,不太會

然後回頭寫a。

a的分塊+凸包寫的很不自信,寫完後一直過不了樣例。

想了一會c,發現也不太會。

然後寫了個裸暴力打算進行對拍,發現裸暴力也錯了。

搞了好久才發現樣例錯了,浪費了好多時間。

感覺時間不多了,於是寫了個b的20分和c的10分。

準備寫b的80分,但是發現細節有點多。

感覺離調出a不久了。

然後就一直調到比賽結束。

最後只有30分。。。。。

總結:由於a的樣例出錯浪費了大量時間。

而且由於分塊好久沒寫了,導致a調很久。

這說明以後要多寫分塊,減少除錯時間。

而且,對計算幾何(凸包)不熟悉

題解:a:從小到大列舉\(c\)。

問題轉化成:維護乙個資料結構,支援插入乙個值,詢問\(p*a_i\),其中\(p\)是\(\geq i\)的有值位置數。

考慮維護一陣列\(b\),如果插入乙個位置\(v\),把\(b_++\)。

我們需要查詢\(\max(b_i*a_i)\)

考慮凸包。我們要支援區間加法。

對於整塊的加法可以預處理出每塊的半平面交然後移動指標。

對於散塊的加法考慮重構,我們要把直線\(a_ix+y\)變成\(a_ix+y+v\)

發現斜率是不會變的,所以建立凸包不用排序

時間複雜度\(o(n\sqrt)\)

#includeusing namespace std;

#define int long long

#define n 100010

int n,w,mx,ans[n],vi[n],l[n],r[n],ss,bb[n],id[n],tg[n],tt[n];

struct noa[n],b[n];

int va(no x,int y)

int operator <(no x,no y)

struct hl

while(tp>1&&cp(s[tp-1],s[tp],x))

tp--;

s[++tp]=x;

} void rb()

pt=1;

} int qu(int x)

}bl[500];

int qu()

void ad(int c,int d) }}

void ins(int x,no y)

signed main()

ss=i-1;

for(int i=1;i<=ss;i++)

for(int i=1;i<=ss;i++)

for(int j=l[i];j<=r[i];j++)

bb[j]=i;

for(int i=1;i<=n;i++)

int pt=1;

sort(b+1,b+n+1,cc);

for(int i=1;i<=n;i++)

id[b[i].x]=max(id[b[i].x],i);

for(int i=1;i<=n;i++)

sort(a+1,a+n+1);

for(int i=1;i<=n;i++)

b[i].y=b[i].x=0;

for(int c=1;c<=mx+1;c++)\)中\(a\)個數和\(b\)個數的差。

乙個字串\(s_\)的差是\(f_i-f_\),要求\(-k \leq f_i-f_\leq k\)

發現\(i,j\)調換不影響答案。

所以合法條件是:\(\max(f_i)-\min(f_i) \leq k\)

考慮列舉\(\min(f_i)\),就能知道\(\max(f_i)\)的取值範圍(\(\min(f_i)+k\)),可以用\(k\)次dp計算。

設\(f_\)表示填了\(i\)個字元,最大值為\(j\)的答案,可以用矩陣乘法計算。

發現這樣子會算重,\(\max(f_i)-min(f_i)\leq k-1\)的會算重。

所以可以把\(k--\)再次進行前面的dp。

發現這樣子就不會算重了,因為更小的區間\([i,i+l]\)會被計算\((k-l+1)-(k-l)=1\)次

回到原問題。令\(f_i\)表示\(s_\)中\(a\)個數和\(b\)個數的差,\(g_i\)表示\(s_\)中\(a\)個數和\(c\)個數的差。

設\(l1\leq f_i\leq l1+k,l2\leq g_i\leq l2+k,l3\leq f_i-g_i\leq l3+k\)

設\(f_\)表示填了\(i\)個字元,\(a_i=l1+j1,b_i=l2+j2\)的個數。

在轉移時需要滿足\(l3 \leq (l1 + j1) − (l2 + j2) \leq l3 + k\)

就是\(l3-l1+l2\leq j1-j2\leq l3-l1+l2+k\)

列舉\(l3-l1+l2\)即可。

時間複雜度\(o(k^7\log_2n)\)

注意也要容斥。

#includeusing namespace std;

#define int long long

#define mo 998244353

int ct,n,k,v1,v2,v3,ans,va;

struct nobz,t;

no operator *(no x,no y)

int pd(int s,int a,int b)

int gt()

no vv=qp(t,n);

for(int i=0;i<=v1;i++)

}} }

return va;

}signed main()

202 12 27學習日記 週日 總結

早上來的很晚。背完單詞後。emmmm 打掃了一下實驗室衛生,然後把買的無線接收器裝上了。睡覺練了一篇摘要,去sci找 第一次點開了個中國人寫的,開啟一股濃濃的我作文的味道,用詞和邏輯與英文文獻確實差異很明顯,果斷換了個。今天練的時候我盡量少用a和the,除了一些語法細節和專有名詞之外,感覺問題最大的...

20151006模擬賽總結

今天上午去一中,又考了個模擬賽。這次的題有點考思維。我感覺這個第一題難度稍微大了點。一般noip第一題要麼是簡單的模擬,要麼是裸的簡單演算法,這次的第一題要自己構造演算法,並且還是列舉和貪心套在一起。我開始想的是列舉 揹包,複雜度為n 3,但是資料範圍沒給出三次方的分。於是我就覺得不靠譜。然後發現列...

20151031模擬賽總結

今天去一中,考了個模擬賽,真是坑。本來在八中食堂愉快的享受我的早飯 週末早上的番茄雞蛋燙飯 韭菜肉餅簡直爽!然後geng4512就跑過來說要去一中考試,然後兩口喝完燙飯就和他一起狂跑過去了。這次第一題組合數取模,模的不是質數。想了好大半天,沒什麼想法,然後看了下後面的題,又回來做這道題,想起了階乘分...