傳送門
把所有關鍵點提出來處理,然後分成相鄰兩個數分別貪心計算答案最後加起來。
現在把問題轉化成了如下模型:
給你乙個01
0101
序列,你可以進行如下幾種操作(四種操作代價不同):
刪去乙個1
刪去乙個0
刪去乙個1,並允許在其後面刪去乙個0
刪去乙個0,並允許在其後面刪去乙個1
然後比比四種操作的代價討論一下即可。
**:
#include
#define ri register int
#define fi first
#define se second
using
namespace std;
const
int rlen=
1<<18|
1;inline
chargc(
)inline
intread()
inline
char
readch()
typedef
long
long ll;
typedef pair<
int,
int> pii;
const
int n=
600005
;int n,d,m,a[n]
,id[n]
;const
int mogic=
1e6+7;
pii seg[n]
;vector<
bool
>seq[n]
;ll va[n]
,vb[n]
,vc[n]
,vd[n]
;const ll inf=
1e18
;struct hash_table
inline
intquery
(pii x)
inline
intcheck
(pii x)
}s;inline
void
update
(ll&a,ll b)
inline ll min
(const ll&a,
const ll&b,
const ll&c)
inline ll query
(vector<
bool
>f,ll a,ll b,ll c,ll d)
else}if
(a+b<=c&&a+b<=d)
return a*ca+b*cb;
if(a+b<=c)
return d*cd+a*
(ca-cd)
+b*(cb-cd);if
(a+b<=d)
return c*cc+a*
(ca-cc)
+b*(cb-cc)
; vector<
bool
>ff;
if(c==inf&&d==inf)
return a*ca+b*cb;
if(c<=d)
int cnt=
0,pre=0;
for(ri i=
1;i<=ca-cd;
++i)ff.
push_back(1
);for(ri i=
1;i<=cb-cd;
++i)ff.
push_back(0
);return d*cd+
query
(ff,a,b,c,inf);}
intmain()
for(ri i=
1,up=s.tot;i<=up;
++i)va[i]
=vb[i]
=vc[i]
=vd[i]
=inf;
m=read()
;char op;
for(ri t,f,i=
1,u,v,w;i<=m;
++i)
else
} ll ans=0;
for(ri i=
1,up=s.tot;i<=up;
++i)ans+
=query
(seq[i]
,va[i]
,vb[i]
,vc[i]
,vd[i]);
cout
}
csp s模擬測試94
一場簡單題,打爆了。t1 腦抽分解質因數準備分子分母消,想了半天發現 jb 互質直接上天,果斷碼了高精滾蛋。t2 無腦手玩大樣例,突然靈光一閃想到對映到前 k 大小的區間,t3 寫完暴力準備划水,突然發現特殊性質可寫,10 分鐘拯救了 25 分。8003 24 46 7003 24 58 6503 ...
csp s模擬測試93
自閉場。t1 想到 cdq 因為複雜度少看見乙個 0 打了半年還用了 sort 直接廢掉,t2 t3 直接自閉暴力分都沒有。考場太慌了,心態不好。8002 07 34 003 12 11 0 03 11 53 8003 12 11 沒有前途就是垃圾趁早滾回實驗二安度晚年吧。cdq 不接受反駁。最簡單...
csp s模擬測試90
考場發明 spfa 祭。t1 按照題意模擬,然後我就發現我死了。一氣之下刪掉了 priority 拍了幾下發現賊jb快而且還是對的就開心地交了。t2 的差分狀態定義很棒然後就調了一場考試,t3 死亡暴力沒拿到分。100 00 38 16 100 03 11 10 0 03 15 44 20003 1...