BJOI2015 Day2
轮到罗剑桥出题了
这是什么风格,中文名称与英文名称分明对不上吗233
T1:
似乎只会做这道题23333
A....BE
........
C....DF
据题意数学变形得A-C<=B-D,B-D<=E-F,即左右的差是递增的。
A....B
.......
C....D
E....F
据题意数学变形得A-B<=C-D,C-D<=E-F,即上下的差是递增的。
那么令f1[i][j]=A[i][j]-A[i+1][j],f2[i][j]=A[i][j]-A[i][j+1]。
只有当f1[i][j-1]<=f1[i][j]且f2[i-1][j]<=f2[i][j]时 (i,j)才能进入矩形中。
那么问题就转化成最大子矩形,其内部没有坏点。
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
const int maxn=;
int A[maxn][maxn],B[maxn][maxn],C[maxn][maxn],n,m,ans;
int is[maxn][maxn];
int right[maxn],left[maxn],up[maxn][maxn];
int main() {
freopen("neo.in","r",stdin);
freopen("neo.out","w",stdout);
n=read();m=read();
rep(i,,n) rep(j,,m) A[i][j]=read();
rep(i,,n) rep(j,,m) B[i][j]=A[i][j]-A[i+][j],C[i][j]=A[i][j]-A[i][j+];
n--;m--;
rep(i,,n) rep(j,,m) if(B[i][j]<=B[i][j+]&&C[i][j]<=C[i+][j]) is[i][j]=;
rep(i,,n) {
rep(j,,m) {
if(!is[i][j]) continue;
up[i][j]=up[i-][j]+;
if(j==) left[j]=;
else {
left[j]=j;
while(up[i][left[j]-]>=up[i][j]) left[j]=left[left[j]-];
}
}
for(int j=m;j;j--) {
if(!is[i][j]) continue;
if(j==m) right[j]=m;
else {
right[j]=j;
while(up[i][right[j]+]>=up[i][j]) right[j]=right[right[j]+];
}
ans=max(ans,(up[i][j]+)*(right[j]-left[j]+));
}
}
printf("%d\n",ans);
return ;
}
T2:简要题意,计算从最上角上方连一条管道到最下角下方的方案书数。
显然是不可做的插头DP,写个暴搜60
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
const int maxn=;
int n,m,ans;
char A[maxn][maxn];
int have[maxn][maxn];
int mx[]={,-,,},my[]={,,,-};
void dfs(int x,int y) {
have[x][y]=;
if(x==n&&y==m) ans++;
else rep(dir,,) if(x>=&&x<=n&&y>=&&y<=m&&!have[x+mx[dir]][y+my[dir]]&&A[x+mx[dir]][y+my[dir]]=='.') dfs(x+mx[dir],y+my[dir]);
have[x][y]=;
}
int main() {
freopen("voda.in","r",stdin);
freopen("voda.out","w",stdout);
n=read();m=read();
rep(i,,n) scanf("%s",A[i]+);
if(A[][]=='#'||A[n][m]=='#') {puts("");return ;}
dfs(,);printf("%d\n",ans%);
return ;
}
T3:有一个N层M格的书架,可以将一本书移动到另一层,也可以把同一层的书左右移动,求从初始状态到最终状态的最少移动数。
考虑那些前后所在层不变的书,应对答案贡献总数-LCS的数目,如果这层全满,需要答案额外+1(先将一本拿到别层再拿回来)。
对于前后所在层变化的书,答案要+1表示移动一次,如果所在连通分量全满,同理答案要再+1.
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
const int maxn=;
int m,C[maxn],t[maxn*maxn],g[maxn];
int get(int* C,int len) {
int ans=;
rep(i,,len) g[i]=<<;
rep(i,,len) {
int k=lower_bound(g+,g+len+,C[i])-g;
ans=max(ans,k);g[k]=C[i];
}
return ans;
}
int n,A[maxn][maxn],B[maxn][maxn],yes[maxn],ans;
int pos[maxn*maxn],pos2[maxn*maxn],first[maxn],next[maxn*maxn*],to[maxn*maxn*],e;
void AddEdge(int u,int v) {
ans++;
to[++e]=v;next[e]=first[u];first[u]=e;
to[++e]=u;next[e]=first[v];first[v]=e;
}
int vis[maxn],f[maxn];
int dfs(int x) {
if(vis[x]) return f[x];vis[x]=;
int& ans=f[x];ans=!yes[x];
for(int i=first[x];i;i=next[i]) ans&=dfs(to[i]);
return ans;
}
int main() {
freopen("police20.in","r",stdin);
freopen("police.out","w",stdout);
n=read();m=read();int ok=,dif=;
rep(i,,n) rep(j,,m) {
A[i][j]=read();
if(!A[i][j]) ok=yes[i]=;
else pos[A[i][j]]=i,pos2[A[i][j]]=j;
}
rep(i,,n) rep(j,,m) {
B[i][j]=read();
if(B[i][j]&&i!=pos[B[i][j]]) AddEdge(i,pos[B[i][j]]);
}
rep(i,,n) {
int len=;
rep(j,,m) if(B[i][j]&&pos[B[i][j]]==i) C[++len]=pos2[B[i][j]];
int tmp=len-get(C,len);
if(tmp) ans+=tmp+(len==m);
}
if(ans&&!ok) puts("-1");
else {
rep(i,,n) if(!vis[i]&&first[i]) ans+=dfs(i);
printf("%d\n",ans);
}
return ;
}
BJOI2015 Day2的更多相关文章
- 【从零开始学BPM,Day2】默认表单开发
[课程主题]主题:5天,一起从零开始学习BPM[课程形式]1.为期5天的短任务学习2.每天观看一个视频,视频学习时间自由安排. [第二天课程] Step 1 软件下载:H3 BPM10.0全开放免费下 ...
- NOIp2016 Day1&Day2 解题报告
Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...
- day2
三级菜单: ))))))))))] last_levels.pop() ]]]]]]]]:] information = : ch = msvcrt.getch() ][][: : password= ...
- java day2一个模拟双色球的代码
package day2; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt ...
- Python基础-day2
1.Python模块python 中导入模块使用import语法格式:import module_name示例1: 导入os模块system('dir')列出当前目录下的所有文件 # _*_ codi ...
- 【BZOJ 4517】【SDOI 2016 Round1 Day2 T2】排列计数
本蒟蒻第一次没看题解A的题竟然是省选$Round1$ $Day2$ $T2$ 这道组合数学题. 考试时一开始以为是莫队,后来想到自己不会组合数的一些公式,便弃疗了去做第三题,,, 做完第三题后再回来看 ...
- 冲刺阶段 day2
day2 项目进展 今天本组五位同学聚在一起将项目启动,首先我们对项目进行了规划,分工,明确指出每个人负责哪些项目.由负责第一部分的组员开始编程,在已经搭建好的窗体内,对系部设置进行了编写,本校共六个 ...
- BZOJ 4337: BJOI2015 树的同构 树hash
4337: BJOI2015 树的同构 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4337 Description 树是一种很常见的数 ...
- python_way ,day2 字符串,列表,字典,时间模块
python_way ,day2 字符串,列表,字典,自学时间模块 1.input: 2.0 3.0 区别 2.0中 如果要要用户交互输入字符串: name=raw_input() 如果 name=i ...
随机推荐
- Git SSH Key 生成步骤
it是分布式的代码管理工具,远程的代码管理是基于ssh的,所以要使用远程的git则需要ssh的配置. github的ssh配置如下: 一 . 设置git的user name和email: $ git ...
- iOS的 context 和Android 中的 canvas
ios 想要绘图,要用到CGContextRef类.最基本的用法是在- (void)drawRect:(CGRect)rect 函数中绘制. Android 中要用到Canvas类.最基本的用法是在 ...
- 通过eclipse配置Spring MVC项目
上一篇刚建立了一个简单的Spring项目,其实Spring MVC是一个和Struts2一样的基于MVC设计模式的web框架,并且继承了MVC的优点,是基于请求驱动的轻量级的web框架,spring ...
- codeforces 471C.MUH and House of Cards 解题报告
题目链接:http://codeforces.com/problemset/problem/471/C 题目意思:有 n 张卡,问能做成多少种不同楼层(floor)的 house,注意这 n 张卡都要 ...
- ubuntu使用root账户登录
1.先设定一个root的密码 sudo passwd root 2.编辑lightdm.conf sudo gedit /etc/lightdm/lightdm.conf 最后一行添加 greeter ...
- PA
[题目描述] 汉诺塔升级了:现在我们有?个圆盘和?个柱子,每个圆盘大小都不一样, 大的圆盘不能放在小的圆盘上面,?个柱子从左到右排成一排.每次你可以将一 个柱子上的最上面的圆盘移动到右边或者左边的柱子 ...
- 案例(JQuery的ajax无刷新评论)
CommentsTest.html代码: <head> <meta http-equiv="Content-Type" content="text/ht ...
- python基础——使用dict和set
python基础——使用dict和set dict Python内置了字典:dict的支持,dict全称dictionary,在其它语言中也称为map(映射),使用键-值(key-value)存储,具 ...
- Adaboost算法结合Haar-like特征
Adaboost算法结合Haar-like特征 一.Haar-like特征 目前通常使用的Haar-like特征主要包括Paul Viola和Michal Jones在人脸检测中使用的由Papageo ...
- ubuntu安装vmware tools
1.选择虚拟机菜单栏--安装VMware tools 选择你装虚拟机下的目录,点击 Linux.iso 再重新点击安装VMware Tools 这样会弹出一个包VMwareTools-9.6.0-1 ...