[4.14校内训练赛by hzwer]
来自FallDream的博客,未经允许,请勿转载,谢谢。
hzwer又出丧题虐人 4道noi.... 很奇怪 每次黄学长出题总有一题我做过了。
嗯题目你们自己看看呗 好难解释
--------------------------------------
A.[bzoj1565][NOI2009]植物大战僵尸
这道题其实挺好想的。nm比较小,考虑最小割,假设割到S表示吃,割到T表示不吃
那么能源小于0的,从S向他连边,流量是负的能源,
能源大于0的,从它向T连边,流量是能源,同时答案加上能源,
然后对于每一个限制条件,都连INF的边 最后最小割。
#include<iostream>
#include<cstdio>
#include<cstring>
#define S 0
#define T 601
#define INF 2000000000
#define num(x,y) ((x-1)*m+y)
using namespace std;
inline int read()
{
int x = , f = ; char ch = getchar();
while(ch < '' || ch > ''){ if(ch == '-') f = -; ch = getchar();}
while(ch >= '' && ch <= ''){x = x * + ch - '';ch = getchar();}
return x * f;
} int head[T+],head2[T+],c[T+],d[T+],cnt=T*T*,tcnt=,n,m,ans=,q[T+],top,s[T+],in[T+];
struct edge{int to,next,w;}e[];
bool b[T+]; void ins(int f,int t){e[++tcnt]=(edge){t,head2[f],};head2[f]=tcnt;in[t]++;}
void ins(int f,int t,int w)
{
e[++cnt]=(edge){t,head[f],w};head[f]=cnt;
e[++cnt]=(edge){f,head[t],};head[t]=cnt;
} void topsort(int x)
{
q[top=]=x;
for(int i=;i<=top;i++)
{
if(x=q[i])
b[x]=,s[x]>=?(ans+=s[x],ins(x,T,s[x]),)
:(ins(S,x,-s[x]),);
for(int j=head2[x];j;j=e[j].next)
if(!--in[e[j].to]) q[++top]=e[j].to;
} for(int i=;i<=n*m;i++) if(b[i])
for(int j=head2[i];j;j=e[j].next) if(b[e[j].to])
ins(i,e[j].to,INF);
} int dfs(int x,int f)
{
if(x==T)return f;
int used=;
for(int&i=c[x];i;i=e[i].next)
if(e[i].w&&d[e[i].to]==d[x]+)
{
int w=dfs(e[i].to,min(f-used,e[i].w));
used+=w;e[i].w-=w;e[i^].w+=w;
if(used==f)return f;
}
return d[x]=-,used;
} bool bfs()
{
memset(d,,sizeof(d));int i,j;
for(d[q[top=i=]=S]=;i<=top;i++)
for(int j=c[q[i]]=head[q[i]];j;j=e[j].next)
if(e[j].w&&!d[e[j].to])
d[q[++top]=e[j].to]=d[q[i]]+;
return d[T];
} int main()
{
n=read();m=read();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(j>) ins(num(i,j),num(i,j-));
s[num(i,j)]=read();
for(int k=read();k;k--)
{
int x=read()+,y=read()+;
ins(num(i,j),num(x,y));
}
}
for(int i=;i<=n;i++) ins(,num(i,m));
topsort();
while(bfs()) ans-=dfs(S,INF);
cout<<ans;
return ;
}
B.阿狸的打字机 戳这里
C.[bzoj1499][NOI2005]瑰丽华尔兹
题解:很容易想到O(nmk)dp,然后我们每一次的更新都只能从一个方向转移,用一个单调队列维护一下
#include<iostream>
#include<cstdio>
#include<cstring>
#define pa pair<int,int>
#define mp(x,y) make_pair(x,y)
#define MN 200
#define INF 200000000
using namespace std;
inline int read()
{
int x = , f = ; char ch = getchar();
while(ch < '' || ch > ''){ if(ch == '-') f = -; ch = getchar();}
while(ch >= '' && ch <= ''){x = x * + ch - '';ch = getchar();}
return x * f;
} int f[MN+][MN+][MN+],T[MN+],dir[MN+],n,m,x,y,k;
char st[MN+][MN+];
struct MyQueue
{
int top,tail;pa s[MN+];
void clear(int x){top=tail=;s[top]=mp(x,-INF);}
void ins(int x,int from)
{
while(s[top].second<x&&top>=tail) --top;
s[++top]=mp(from,x);
}
int get(int t)
{
while(s[tail].first<t) ++tail;
return s[tail].second;
}
}q; int main()
{
memset(f,,sizeof(f)); q.clear();
n=read();m=read();x=read();y=read();k=read();
f[][x][y]=;
for(int i=;i<=n;i++) scanf("%s",st[i]+);
for(int i=;i<=k;i++)
{
int x=read(),y=read();
T[i]=y-x+;dir[i]=read();
}
for(int t=;t<=k;t++)
{
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
f[t][i][j]=max(f[t][i][j],f[t-][i][j]);
if(dir[t]==)
for(int i=;i<=m;i++,q.clear())
for(int j=n;j;j--)
if(st[j][i]!='x')
f[t][j][i]=max(f[t][j][i],q.get(n+-j-T[t])-j),q.ins(f[t-][j][i]+j,n+-j);
else q.clear(n+-j);
if(dir[t]==)
for(int i=;i<=m;i++,q.clear())
for(int j=;j<=n;j++)
if(st[j][i]!='x')
f[t][j][i]=max(f[t][j][i],q.get(j-T[t])+j),q.ins(f[t-][j][i]-j,j);
else q.clear(j);
if(dir[t]==)
for(int i=;i<=n;i++,q.clear())
for(int j=m;j;j--)
if(st[i][j]!='x')
f[t][i][j]=max(f[t][i][j],q.get(m+-j-T[t])-j),q.ins(f[t-][i][j]+j,m+-j);
else q.clear(m+-j);
if(dir[t]==)
for(int i=;i<=n;i++,q.clear())
for(int j=;j<=m;j++)
if(st[i][j]!='x')
f[t][i][j]=max(f[t][i][j],q.get(j-T[t])+j),q.ins(f[t-][i][j]-j,j);
else q.clear(j);
}
int ans=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
ans=max(ans,f[k][i][j]);
cout<<ans;
return ;
}
D.[bzoj3670][Noi2014]动物园
自己yy了一下,发现num[i]就是在i/2之前的fail节点的个数。
可以假装用自己这个串匹配自己,然后到了第i个点的时候突然不对了(别问我为什么不对),那么我跳到的fail节点一定既是前缀又是现在的后缀,因为我在匹配自己呢(雾)
#include<iostream>
#include<cstdio>
#include<cstring>
#define MN 1000000
#define mod 1000000007
using namespace std;
bool b[MN+];
int fail[MN+],num[MN+],ans=;
char st[MN+];
int main()
{
num[]=;int T;
for(cin>>T;T;T--)
{
scanf("%s",st+);ans=;
memset(b,,sizeof(b));
for(int i=,j=;st[i];i++)
{
while(j&&st[j+]!=st[i])j=fail[j];
if(st[j+]==st[i]) ++j;
fail[i]=j;num[i]=num[j]+;
}
for(int i=,j=;st[i];i++)
{
while(j&&((j+)*>i||st[j+]!=st[i]))j=fail[j];
if(st[j+]==st[i]) ++j;
ans=1LL*ans*(num[j]+)%mod;
}
printf("%d\n",ans);
}
return ;
}
[4.14校内训练赛by hzwer]的更多相关文章
- [2017.4.7校内训练赛by hzwer]
来自FallDream的博客,未经允许,请勿转载,谢谢. 报警啦.......hzwer又出丧题虐人啦..... 4道ctsc...有一道前几天做过了,一道傻逼哈希还wa了十几次,勉强过了3题..我好 ...
- [3.24校内训练赛by hzwer]
来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...
- 2015 AlBaath Collegiate Programming Contest(2月14日训练赛)
A (By ggg): 题意:一个人还有x秒到红绿灯,这个红绿灯有g秒绿灯,y秒黄 灯,r秒红灯,问你到红绿灯的时候是什么灯.值得注意的是绿 灯变黄灯时,第g秒是黄灯了. B (By Anxdada) ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 10.0.0.55_12-16训练赛部分writeup
0x1 - MISC MISC100 一张帅行的照片 目测是图片隐写,但是binwalk并没有出来,应该是对文件头进行了修改 010editor查看一下,发现在jpg文件尾之后还有大量的数据 而且在灰 ...
- Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)
Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走 ...
- Contest1585 - 2018-2019赛季多校联合新生训练赛第一场(部分题解)
Contest1585 - 2018-2019赛季多校联合新生训练赛第一场 C 10187 查找特定的合数 D 10188 传话游戏 H 10192 扫雷游戏 C 传送门 题干: 题目描述 自然数中除 ...
- 7.30 正睿暑期集训营 A班训练赛
目录 2018.7.30 正睿暑期集训营 A班训练赛 T1 A.蔡老板分果子(Hash) T2 B.蔡老板送外卖(并查集 最小生成树) T3 C.蔡老板学数学(DP NTT) 考试代码 T2 T3 2 ...
- HDU6578 2019HDU多校训练赛第一场 1001 (dp)
HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...
随机推荐
- 在arc模式下 CGImage 释放问题
//大图bigImage //定义myImageRect,截图的区域 if (imagecount >= 3) { CGRect myImageRect; if (i.size.width< ...
- CSS <input type="file">样式设置
这是最终想要的效果~~~ 实现很简单,div设置背景图片,<input type="file"/>绝对定位上去再设置opacity:0(透明度为0 ) 直接上代码,希望 ...
- sublimeText3 中配置sass环境,并将编译后文件保存到指定文件夹
sass基于ruby引擎,所以安装时ass.compass之前需要安装ruby.具体的链接应该是(http://rubyinstaller.org/downloads).下载并安装相应的版本,勾选第二 ...
- 如何在Java中避免equals方法的隐藏陷阱
摘要 本文描述重载equals方法的技术,这种技术即使是具现类的子类增加了字段也能保证equal语义的正确性. 在<Effective Java>的第8项中,Josh Bloch描述了当继 ...
- 新概念英语(1-57)An unusual day
新概念英语(1-57)An unusually day What is Mr. Sawyer doing tonight? It is eight o'clock. The children go t ...
- *args和**kwargs
#coding=utf8 __author__ = 'Administrator' # 当函数的参数不确定时,可以使用*args和**kwargs.*args没有key值,**kwargs有key值 ...
- SpringMVC(七):@RequestMapping下使用POJO对象绑定请求参数值
Spring MVC会按照请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,支持级联属性. 如:address.city.dept.address.province等. 步骤一:定义Ac ...
- scrapy中response.body 与 response.text区别
scrapy中response.body 与 response.text区别 body http响应正文, byte类型 text 文本形式的http正文,str类型,它是response.body经 ...
- 对return函数的认识
例1: def funOut(): def funIn(): print('宾果!你成功访问到我啦!') return funIn() #注意这里return的是funIn()即是一个函数 funOu ...
- window下编辑了脚本文件linux报如下错误
首先vi :set ff 查看文件类型 接着 下载dos2unix root用户下yum -y install dos2unix 然后 dos2unix 文件.sh 转换格式 接着在正常启动即可