2017 4 7校內訓練

2022-07-24 09:24:06 字數 3857 閱讀 6490

喪病hzwer的ctsc訓練賽 my ac:3/4

a.[ctsc2014]企鵝qq

思路:亂hash,我比較菜,寫的醜**各種wa+tle,好久才a掉。

#include#include

using

namespace

std;

#define ll long long

#define mn 200

#define mx 6000000

#define mm 9000001

#define mod1 890123798112473ll

struct

mape[mx+5

];

inth[mm],en;

inline

int&operator

(ll x)

;h[p]=en;

return

e[en].t;

}}mp1,mp2;

char s[mn+5

];ll f1[mn+5],f2[mn+5

];int

main()

}printf("%d

",ans);

}

b.[ctsc2007]資料備份backup

思路:顯然只有相鄰的會被選,先把所有相鄰線段用煉錶鏈起來塞到堆裡,每次取出最小的,與他相鄰的線段暫時不能選就刪掉,如果要在之後再選相鄰的這兩條,顯然不可能只選其中一條而不選中間這條,我們把這三條合併成左+右-中再塞回堆即可。

#include#include

using

namespace

std;

inline

intread()

#define mn 100000

int a[mn+5],l[mn+5],r[mn+5],w[mn+5],u[mn+5

];class cmp};

priority_queue

,cmp>pq;

intmain()

printf("%d

",ans);

}

c.[ctsc2015]misc

思路:列舉s,每個s先跑一遍單源最短路,只考慮最短路上的邊(即滿足dis[u]+len=dis[v]的邊),得到一張拓撲圖,在拓撲圖上先dp出s到每個點的最短路寬度$\sigma_$;

考慮每個v,$r(v)=\sum \fraca_\sigma_(v)}}=\sum \fraca_\sigma_\sigma_}}=a_\sigma_\sum\frac\sigma_}}$,其中t為v在最短路拓撲圖中能到的點。

我們令$f(v)=\sum\frac\sigma_}}$,則有$f(u)=\sum c_(\frac}}+f(v))$,其中j為u到v的一條最短路邊。然後dp下就做完了。

#include#include

#define mn 1000

#define mm 4000

#define n 1024

#define lb long double

struct edgee[mm*2+5

];int n,h[mn+5],en,a[mn+5],d[mn+5],q[mn+5],qn,r[mn+5

];lb fk[mn+5],fj[mn+5],ans[mn+5

];inline

void ins(int x,int y,int

w,lb c)

;h[x]=en;

e[++en]=(edge);h[y]=en;

}struct datat[n*2+5

];data min(data a,data b)

void change(int k,int x)

void dj(int

s)void

pre()

}}void solve(int

s)

if(q[i]!=s)ans[q[i]]+=a[s]*fk[q[i]]*fj[q[i]];

fj[q[i]]+=a[q[i]]/fk[q[i]];

}}int

main()

d.[ctsc2015]gender

思路:拿hzwer的標程研究了下,貌似題目有個很重要的東西沒說,就是每條鏈的第一只一定同輩(至少hzwer的標程裡貌似是這麼認為的)……於是我們先用並查集搞出每只羊的輩分,每一輩之間的繁衍關係相互獨立,$\left \lfloor 10ln(1+a) \right \rfloor$這個式子太玄學,顯然我們只能列舉a(事實上只要列舉$\left \lfloor 10ln(1+a) \right \rfloor$),列舉確定了這個式子的值後,由於k很小而且每一輩獨立,我們可以用最小割求出每一輩鏈上的點的各個改造情況下的最大收益(最基本的文理分科,不會請繞道),然後狀壓dp,f[i][j][k]表示前i輩,j個相鄰的不同,最後一輩鏈上的點的改造情況為k,最後用滿足$\left \lfloor 10ln(1+j) \right \rfloor$等於我們列舉出的值的f[n][j][k]來更新答案,複雜度o(很複雜)。

#include#include

#include

#include

using

namespace

std;

#define ll long longinline

intread()

#define mn 1000

#define mm 10000

#define mv 21000

#define me 61000

#define s mv+1

#define t mv+2

#define inf 0x7fffffff

char s[mn+5

];int n,k,m,p,c[mn+5],l[mn+5],d[mn+5],f[mn+5],xx[mm+5],yy[mm+5],w1[mm+5],w2[mm+5],a[205

];int qv[205][mn+5],qe[205][mm+5

];ll ans,g[

55][16],f[55][205][16

];int gf(int k)

namespace

maxflow

e[me*2+5

];

int h[mv+5],en=1,d[mv+5],q[mv+5],qn,c[mv+5

]; inline

void ins(int x,int y,int

w) ;h[x]=en;

e[++en]=(edge);h[y]=en;

}bool

bfs()

int dfs(int x,int

r)

return d[x]=0

,u; }

ll dinic()

};void cal(int ln,int x,int

y)

for(i=1;i<=qe[x][0];++i)

g[x][y]=res-maxflow::dinic();

using

maxflow::h;

for(i=1;i<=qv[x][0];++i)h[qv[x][i]]=0

;

for(i=m;++i<=cnt;)h[i]=0

; h[s]=h[t]=0;maxflow::en=1;}

void dp(int

ln)

for(j=0;a[j]<=ln;++j)if(a[j]==ln)for(l=0;l<1

}int

main()

printf(

"%lld

",ans);

}

20161104校內訓練

一道類似模擬的題,就根據所寫的東西來做就可以了。include define rep i l r for int i l i r i define per i r l for int i r i l i define erep i u for int i head u i i e i nxt usi...

2017 4 14校內訓練

hzwer拿了幾道noi中比較簡單的給我們做 a.noi2009 植物大戰殭屍 思路 考慮最小割,如果乙個植物的權值x是正的,我們先預設吃掉它,使答案加上x並讓s向這個點連x,割這條邊相當於不吃這個植物,否則讓這個點向t連 x,割這條邊相當於吃這個植物,每個植物讓它能攻擊到的格仔和它的前一格向它連i...

9 10校內訓練

這次的校內訓練有4題,難度適中,成績也不錯.令人詫異的是這次的四題居然都是原題.儘管如此,我還是有比較多的失誤.第一題原題在洛谷1360,題意大致是給出n個01串 不超過m位,壓成整數 求這些串中最長的子串滿足對於每一位,這個字串每個元素這位是1的個數的和相同.比如 1110010 1001 111...