開場看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就跑過來說要去一中考試,然後兩口喝完燙飯就和他一起狂跑過去了。這次第一題組合數取模,模的不是質數。想了好大半天,沒什麼想法,然後看了下後面的題,又回來做這道題,想起了階乘分...