【HDU 2577】How to Type
题意
(我做了这题才知道caps lock 锁定大小写后,按一下shift键可以输入相反的大小写。)
这题就是给你只有大小写字母的字符串,求最少多少次按键盘。最后caps lock 必须是关闭的。
分析
这题可以模拟也可以dp。
代码
模拟
#include<cstdio>
#include<cstring> int t,on,i,ans;
char s[]; int isU(char a)
{
return a<='Z'&&a>='A';
} int main()
{
scanf("%d",&t);
while(t--)
{
memset(s,,sizeof s);
on=i=ans=;//一开始caps lock关闭 scanf("%s",s); while(s[i])//处理每个字母
{
if(isU(s[i])&&!on)//如果是大写且caps lock 关闭了
{
ans++;//打开caps lock 或者按一次shift
if(isU(s[i+]))//如果后面紧接着大写就开启caps lock
on=;
} if(!isU(s[i])&&on)//同理
{
ans++;
if(!isU(s[i+]))
on=;
} ans++;//输入当前字母
i++;
} if(on)//最后使caps lock 关闭
ans++; printf("%d\n",ans);
}
return ;
}
dp
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; int t,on,i,ans,n;
char s[];
int dp[][]; int isU(char a)
{
return a<='Z'&&a>='A';
} int main()
{
scanf("%d",&t);
while(t--)
{
memset(s,,sizeof s);
memset(dp,,sizeof dp);
on=i=ans=; scanf("%s",s); //如果s[0]是大写,要关闭状态,那就按shift,再按字母
dp[][]=isU(s[])+; //小写先按字母再按caps lock,大写先caps lock 再按字母
dp[][]=;
n=strlen(s);
for(int i=;i<n;i++)
{
if(isU(s[i])){
//大写字母
//关闭状态,可以由关闭状态按shift键再按字母。或由打开状态按字母再关闭。
dp[i][]=min(dp[i-][],dp[i-][])+; //打开状态,可以关闭状态打开再按字母,或打开状态直接按字母。
dp[i][]=min(dp[i-][]+,dp[i-][])+;
}else{
//小写字母同理
dp[i][]=min(dp[i-][],dp[i-][]+)+;
dp[i][]=min(dp[i-][],dp[i-][])+;
}
} printf("%d\n",dp[n-][]);//必须关闭状态
}
return ;
}
【HDU 2577】How to Type的更多相关文章
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- 【HDU 5647】DZY Loves Connecting(树DP)
pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- 【HDU 2196】 Computer(树的直径)
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
- 【HDU 2196】 Computer (树形DP)
[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...
- 【HDU 5145】 NPY and girls(组合+莫队)
pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...
- 【hdu 1043】Eight
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...
- 【HDU 3068】 最长回文
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...
- 【HDU 4699】 Editor
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...
随机推荐
- bootstrap学习总结-css样式设计(一)
由于项目需要,所以打算好好学习下bootstrap框架,之前了解一点,框架总体不难,但涉及到的东西还是很多,想要熟练掌握它,还是要多练练. 一:bootstrap是什么? bs是什么? 即前端页面搭 ...
- Javascript中的对象和原型(3)
在Javascript中的对象和原型(二)中我们提到,用构造函数创建的对象里面,每个对象之间都是独立的,这样就会降低系统资源的利用率,解决这样问题,我们就要用到下面提到的原型对象. 一 原型对象 原型 ...
- android strings.xml 报 is not translated in af,
57 down vote In your ADT go to window->Preferences->Android->Lint Error Checking Find there ...
- CSS padding margin border属性
主要定义四个区域:内容(content).内边距(padding).边框(border)和外边距(margin) margin:层的边框以外留的空白 background-color:背景颜色 bac ...
- 一篇文章告诉你为何GitHub估值能达20亿美元
软件开发平台GitHub今日宣布,已获得硅谷多家知名风投2.5亿美元融资,这也让其融资总额达到了3.5亿美元,此轮融资对GitHub的估值约为20亿美元. GitHub有何特别之处? GitHub创立 ...
- cookies,sessionStorage和localStorage的区别
联系: sessionStorage和localStorage一样,都是用来缓存客户端缓存信息. 他们都只能存储字符串类型对象. 区别: localStorage的生命周期是永久的,除非用户主动清除浏 ...
- INADDR_ANY的确切含义
INADDR_ANY就是inet_addr("0.0.0.0") 首先,需要明确的是当服务器的监听地址是INADDR_ANY时设置的是服务器的IP地址. 其次,当服务器的监听地址是 ...
- Linux 读书笔记 二
一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的“实验截图”保存并分 ...
- Git差异比对
一. 查看变更还未载入(changed but unstaged,当前没有add 的内容)的文件比对: 只需运行不带任何参数的'git diff'命令即可 二. 查看载入(stage,即已经add)而 ...
- 从Swift学习iOS开发的路线指引
本文主要是楼主近段时间从Swift语法开始自学iOS开发的流程总结,PS 一个前提,楼主的生存环境中买不到一本iOS开发中文教程,所以基本都是百度摸索出来的 >_< 主要流程 学习Swif ...