2017 4 14校內訓練

2022-07-24 09:15:10 字數 2191 閱讀 7183

hzwer拿了幾道noi中比較簡單的給我們做

a.[noi2009]植物大戰殭屍

思路:考慮最小割,如果乙個植物的權值x是正的,我們先預設吃掉它,使答案加上x並讓s向這個點連x,割這條邊相當於不吃這個植物,否則讓這個點向t連-x,割這條邊相當於吃這個植物,每個植物讓它能攻擊到的格仔和它的前一格向它連inf,表示要麼不吃它能保護到的,要麼吃它,如果構成了環,這些植物必然都不能被吃,判完環後環上的點全部向t連inf即可。

#include#include

inline

intread()

#define mv 600

#define me 400000

#define s mv+1

#define t mv+2

#define inf 0x7fffffff

#define p(x,y) ((x)*30+(y)+1)

struct edgee[me*2+5

];int h[mv+5],en=1,d[mv+5],c[mv+5],q[mv+5],qn,df[mv+5],lw[mv+5],cnt,inq[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;}

void dfs(int

x) u=q[qn-1]!=x;

if(df[x]==lw[x])for(;q[qn]!=x;u?(ins(q[qn],t,inf),0):0)inq[q[--qn]]=0;}

intmain()

for(i=0;ifor(j=0;jif(!df[p(i,j)])dfs(p(i,j));

while(bfs())ans-=dfs(s,inf);

printf("%d

",ans);

}

b.[noi2011]阿狸的打字機

之前做過了,題解戳這裡

c.[noi2005]瑰麗華爾茲

思路:用f[i][j][k]表示前i段時間過後,鋼琴在(j,k)的最長路程,轉移很顯然單調佇列嘛,複雜度o(nmk)。

#include#include

#include

using

namespace

std;

inline

intread()

#define mn 200

int f[mn+5][mn+5][mn+5],q[mn+5

],ql,qr;

char s[mn+5][mn+5

];int

main()

if(y==2)for(yy=1;yy<=m;++yy)for(ql=1,qr=0,xx=1;xx<=n;++xx)

if(y==3)for(xx=1;xx<=n;++xx)for(ql=1,qr=0,yy=m;yy;--yy)

if(y==4)for(xx=1;xx<=n;++xx)for(ql=1,qr=0,yy=1;yy<=m;++yy)

}for(i=1;i<=n;++i)for(j=1;j<=m;++j)ans=max(ans,f[t][i][j]);

printf("%d

",ans);

}

d.[noi2014]動物園

思路:首先kmp弄出next陣列,num[i]就是每次令i=next[i],在變成0前有多少次不超過i/2,先不考慮不超過i/2的限制,則num[i]=num[next[i]]+1,對於每個next[i]>i/2,扣掉它next幾次後會小等於i/2,由於它的迴圈節是i-next[i],每次取next都會使它的值減小i-next[i],除一下就好了,複雜度o(n)。

#include#include

#define mn 1000000

#define mod 1000000007

char s[mn+5

];int nx[mn+5],f[mn+5

];int

main()

for(ans=i=1;s[i];++i)

printf(

"%d\n

",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 7校內訓練

喪病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 defin...

9 10校內訓練

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