CSP S模擬 環球巡演(hash表 貪心)

2021-09-25 14:00:06 字數 2231 閱讀 5533

傳送門

把所有關鍵點提出來處理,然後分成相鄰兩個數分別貪心計算答案最後加起來。

現在把問題轉化成了如下模型:

給你乙個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...