BZOJ2990 : [Ontak2010]Keyboard
考虑从$(1,1)$开始搜索移动方案,每次移动坐标的变化量都是$2$。
如果构成了环,那么环的周长肯定是偶数。
考虑这个环一定要被若干个骨牌覆盖,且还有一个位置是空的。
所以得出环的周长是奇数,矛盾,因此这个搜索不会搜出环,从而会得到一棵有根树。
那么答案就是所有关键点加上根节点形成的虚树的边总长$\times 2-$离根最远的关键点到根的距离,DP即可。
时间复杂度$O(nm)$。
#include<cstdio>
const int N=75,M=1230;
char s[N],a[N][N];
int n,m,cnt,i,j,x,y,z,ans,id[N][N],is[M],g[M],nxt[M],v[M],f[M];
inline bool check(char x){return x=='a'||x=='e'||x=='i'||x=='o'||x=='u'||x=='y';}
void dfs(int x,int y,int z,int u){
if(x<1||x>n||y<1||y>m)return;
int o=id[x][y];
v[o]=1;
if(u)nxt[o]=g[u],g[u]=o;
if(z!=2&&a[x][y+1]=='-')dfs(x,y+2,1,o);
if(z!=1&&a[x][y-1]=='-')dfs(x,y-2,2,o);
if(z!=4&&a[x+1][y]=='|')dfs(x+2,y,3,o);
if(z!=3&&a[x-1][y]=='|')dfs(x-2,y,4,o);
}
void dp(int x){
for(int i=g[x];i;i=nxt[i]){
dp(i);is[x]+=is[i];
if(is[i]){
ans+=2;
if(f[i]>=f[x])f[x]=f[i]+1;
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(i=1;i<=n;i+=2)for(j=1;j<=m;j+=2)id[i][j]=++cnt;
for(i=1;i<=n;i++)for(scanf("%s",s+1),j=1;j<=m;j++)is[id[i][j]]|=check(s[j]);
for(i=1;i<=n;i++)scanf("%s",a[i]+1);
dfs(1,1,0,0);
for(i=0;i<=cnt;i++)if(is[i]&&!v[i])return puts("NIE"),0;
dp(1);
return printf("%d",ans-f[1]),0;
}
BZOJ2990 : [Ontak2010]Keyboard的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Fedora 22中的Locale and Keyboard Configuration
Introduction The system locale specifies the language settings of system services and user interface ...
- android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
<activity android:name="xxxActivity" android:configChanges="keyboard|keyboardHidde ...
- USB Keyboard Recorder
catalogue . 引言 . Device Class Definition for Human Interface Devices (HID) . USB HID Report Descript ...
- imx6 matrix keyboard
imx6需要添加4x4的矩阵键盘.本文记录添加方法. 参考链接 http://processors.wiki.ti.com/index.php/TI-Android-JB-PortingGuide h ...
- Codeforces Round #389 Div.2 B. Santa Claus and Keyboard Check
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- UVa 11998 Broken Keyboard (数组模拟链表问题)
题目链接: 传送门 Broken Keyboard #include<bits/stdc++.h> using namespace std; char str[100010]; int m ...
- vimium Keyboard Bindings
Modifier keys are specified as `<c-x>`, `<m-x>`, and `<a-x>` for ctrl+x, meta+x, a ...
- UVa 11988 Broken Keyboard(链表->数组实现)
/*数组形式描述链表:链表不一定要用指针. 题目链接:UVa 11988 Broken Keyboard 题目大意: 小明没有开屏幕输入一个字符串,电脑键盘出现了问题会不定时的录入 home end ...
随机推荐
- Android 菜单定制使用小结
GridView 添加 ArrayAdapter<Bean>, 在 gridView 的 Item 点击之后, 1.list.add(bean)/remove(bean) 2.adapte ...
- Java Web基础——Action+Service +Dao三层的功能划分
1. Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. D ...
- PHP常用函数大全。
php usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID. time_sleep_ ...
- CLR via C#学习笔记----知识总概括
第1章 CLR的执行模型 托管模块的各个组成部分:PE32或PE32+头,CLR头,元数据,IL(中间语言)代码. 高级语言通常只公开了CLR的所有功能的一个子集.然而,IL汇编语言允许开发人员访问C ...
- [插件]jQuery multiselect初始化及默认值修改
下载地址:http://pan.baidu.com/s/1dE2daSD 1.Jquery多选下拉列表插件jquery multiselect功能介绍及使用 http://www.jb51.net/a ...
- JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)
1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% requ ...
- Delphi编译dll时出错"Cannot debug project unless a host application is defined.use the run|parameters...dialog box."
问题: 在编写DLL程序的时候,按下F9或者按下那个绿色的箭头,会报错,如下 原因: 是因为你按下的F9或者那个绿色箭头是表示“Run”这个程序,但是DLL不是可执行文件,所以当然不能够运行,所以就会 ...
- 栈与队列:refresh的停车场
数据结构实验之队列一:排队买饭 Time Limit: 1000MS Memory limit: 65536K 题目描述 中午买饭的人特多,食堂真是太拥挤了,买个饭费劲,理工大的小孩还是很聪明的,直接 ...
- static_cast、dynamic_cast、reinterpret_cast、const_cast以及C强制类型转换的区别
static_cast 1. 基础类型之间互转.如:float转成int.int转成unsigned int等 2. 指针与void*之间互转.如:float*转成void*.CBase*转成void ...
- <转>SQL语句执行顺序说明
原文地址:http://www.cnblogs.com/summer_adai/archive/2011/10/28/2227605.html SQL 不同于与其他编程语言的最明显特征是处理代码的顺序 ...