来自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]的更多相关文章

  1. [2017.4.7校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 报警啦.......hzwer又出丧题虐人啦..... 4道ctsc...有一道前几天做过了,一道傻逼哈希还wa了十几次,勉强过了3题..我好 ...

  2. [3.24校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...

  3. 2015 AlBaath Collegiate Programming Contest(2月14日训练赛)

    A (By ggg): 题意:一个人还有x秒到红绿灯,这个红绿灯有g秒绿灯,y秒黄 灯,r秒红灯,问你到红绿灯的时候是什么灯.值得注意的是绿 灯变黄灯时,第g秒是黄灯了. B (By Anxdada) ...

  4. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  5. 10.0.0.55_12-16训练赛部分writeup

    0x1 - MISC MISC100 一张帅行的照片 目测是图片隐写,但是binwalk并没有出来,应该是对文件头进行了修改 010editor查看一下,发现在jpg文件尾之后还有大量的数据 而且在灰 ...

  6. Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)

    Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走 ...

  7. Contest1585 - 2018-2019赛季多校联合新生训练赛第一场(部分题解)

    Contest1585 - 2018-2019赛季多校联合新生训练赛第一场 C 10187 查找特定的合数 D 10188 传话游戏 H 10192 扫雷游戏 C 传送门 题干: 题目描述 自然数中除 ...

  8. 7.30 正睿暑期集训营 A班训练赛

    目录 2018.7.30 正睿暑期集训营 A班训练赛 T1 A.蔡老板分果子(Hash) T2 B.蔡老板送外卖(并查集 最小生成树) T3 C.蔡老板学数学(DP NTT) 考试代码 T2 T3 2 ...

  9. HDU6578 2019HDU多校训练赛第一场 1001 (dp)

    HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...

随机推荐

  1. 大神都在看的RxSwift 的完全入坑手册

    大神都在看的RxSwift 的完全入坑手册 2015-09-24 18:25 CallMeWhy callmewhy 字号:T | T 我主要是通过项目里的 Rx.playground 进行学习和了解 ...

  2. Codechef March Challenge 2014——The Street

    The Street Problem Code: STREETTA https://www.codechef.com/problems/STREETTA Submit Tweet All submis ...

  3. hadoop基础教程免费分享

    提起Hadoop相信大家还是很陌生的,但大数据呢?大数据可是红遍每一个角落,大数据的到来为我们社会带来三方面变革:思维变革.商业变革.管理变革,各行业将大数据纳入企业日常配置已成必然之势.阿里巴巴创办 ...

  4. 进军ABP第一天:ABP理论知识

    1.2.3 领域层领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现. ( 实体(Entity ) 实体代表业务领域的数据和操作,在实践中,通过用来映射成数据库表. ( 仓储(Repo ...

  5. PHP trait

    ps:由于PHP是单继承的,无法继承多个类所以可以用triat(关键字,特性)来命名达到子类继承多个父类的效果:暂且理解为类吧.class = trait <?php trait A { pub ...

  6. Python-迭代器&生成器&装饰器&软件目录结构规范-Day5

    目录Day-Python-迭代器&生成器 21.生成器 21.1.生成器引入 21.2.生成器作用 31.3.创建生成器的方法 31.4.用函数来实现复杂的生成器 51.5.把函数变成生成器通 ...

  7. OAuth2.0学习(1-6)授权方式3-密码模式(Resource Owner Password Credentials Grant)

    授权方式3-密码模式(Resource Owner Password Credentials Grant) 密码模式(Resource Owner Password Credentials Grant ...

  8. less规范

    Less 编码规范 (1.1) 简介 该文档主要的设计目标是提高 Less 文档的团队一致性与可维护性. Less 代码的基本规范和原则与 CSS 编码规范 保持一致. 编撰 吕俊涛 本文档由商业运营 ...

  9. 赛码网算法: 上台阶 ( python3实现 、c实现)

    上台阶 题目描述 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?注:规定从一级到一级有0种走法. 输入输入数据首先包含一个整数n(1<=n<=1 ...

  10. servlet filter中使用autowired无法注入

    问题: 我们为了避免未经授权的人直接通过url访问我们的页面,配置了如下filter <!-- 登录过滤器 --> <filter> <filter-name>se ...