(我做了这题才知道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的更多相关文章

  1. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  2. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

  3. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  4. 【HDU 2196】 Computer(树的直径)

    [HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...

  5. 【HDU 2196】 Computer (树形DP)

    [HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...

  6. 【HDU 5145】 NPY and girls(组合+莫队)

    pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...

  7. 【hdu 1043】Eight

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...

  8. 【HDU 3068】 最长回文

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...

  9. 【HDU 4699】 Editor

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...

随机推荐

  1. HDU 4406 最大费用最大流

    题意:现有m门课程需要复习,已知每门课程的基础分和学分,共有n天可以复习,每天分为k个时间段,每个时间段可以复习一门课程,并使这门课程的分数加一,问在不挂科的情况下最高的绩点. 思路:(没做过费用流的 ...

  2. VA助手(Visual Assist X) 笔记

    官方网站:http://www.wholetomato.com/ 一. 快捷键 Shift+Alt+F Find References 查找引用 Shift+Alt+S FindSynbolDialo ...

  3. flex4的s:states和mx:states的区别

    http://help.adobe.com/en_US/Flex/4.0/UsingSDK/WS2db454920e96a9e51e63e3d11c0bf63611-7ffa.html#WS43468 ...

  4. git冲突解决办法

    git错误error: Your local changes to the following files would be overwritten 然后可以使用git diff -w +文件名 来确 ...

  5. emberjs重写补充类之reopen方法和reopenClass方法

    无需一次性将类定义完全,你可以使用reopen方法来重新打开(reopen)一个类并为其定义新的属性. Person.reopen({ isPerson: true }); Person.create ...

  6. iOS math.h数学函数

    在实际工作中有些程序不可避免的需要使用数学函数进行计算,比如地图程序的地理坐标到地图坐标的变换.Objective-C做为ANSI C的扩展,使用C标准库头文件<math.h>中定义的数学 ...

  7. Windows Phone 简介

    中文官网 https://dev.windowsphone.com/zh-cn Windows Phone SDK 7.1 http://www.microsoft.com/zh-cn/downloa ...

  8. 【夯实Mysql基础】MySQL在Linux系统下配置文件及日志详解

    本文地址 分享提纲: 1. 概述 2. 详解配置文件 3. 详解日志 1.概述 MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于 ...

  9. c语言 数组名是常量指针

    //数组名是常量指针 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include ...

  10. Sql Server UniCode编码解码

    ); set @s = N'揶'; select UniCode(@s),nchar(UniCode(@s)); 在 SQL Server 中处理 Unicode 字串常数时,您必需在所有的 Unic ...