【HDU 2577】How to Type

我做了这题才知道caps lock 锁定大小写后,按一下shift键可以输入相反的大小写。

这题就是给你只有大小写字母的字符串,求最少多少次按键盘。最后caps lock 必须是关闭的。

分析

这题可以模拟也可以dp。

代码

模拟

#include<cstdio>
#include<cstring>

int t,on,i,ans;
char s[105];

int isU(char a)
{
    return a<=‘Z‘&&a>=‘A‘;
}

int main()
{
    scanf("%d",&t);
    while(t--)
    {
        memset(s,0,sizeof s);
        on=i=ans=0;//一开始caps lock关闭

        scanf("%s",s);

        while(s[i])//处理每个字母
        {
            if(isU(s[i])&&!on)//如果是大写且caps lock 关闭了
            {
                ans++;//打开caps lock 或者按一次shift
                if(isU(s[i+1]))//如果后面紧接着大写就开启caps lock
                    on=1;
            }

            if(!isU(s[i])&&on)//同理
            {
                ans++;
                if(!isU(s[i+1]))
                    on=0;
            }

            ans++;//输入当前字母
            i++;
        }

        if(on)//最后使caps lock 关闭
            ans++;

        printf("%d\n",ans);
    }
    return 0;
}

dp

#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

int t,on,i,ans,n;
char s[105];
int dp[105][2];

int isU(char a)
{
    return a<=‘Z‘&&a>=‘A‘;
}

int main()
{
    scanf("%d",&t);
    while(t--)
    {
        memset(s,0,sizeof s);
        memset(dp,0,sizeof dp);
        on=i=ans=0;

        scanf("%s",s);

//如果s[0]是大写,要关闭状态,那就按shift,再按字母
        dp[0][0]=isU(s[0])+1;

//小写先按字母再按caps lock,大写先caps lock 再按字母
        dp[0][1]=2;
        n=strlen(s);
        for(int i=1;i<n;i++)
        {
            if(isU(s[i])){
//大写字母
//关闭状态,可以由关闭状态按shift键再按字母。或由打开状态按字母再关闭。
                dp[i][0]=min(dp[i-1][0],dp[i-1][1])+2;

//打开状态,可以关闭状态打开再按字母,或打开状态直接按字母。
                dp[i][1]=min(dp[i-1][0]+1,dp[i-1][1])+1;
            }else{
//小写字母同理
                dp[i][0]=min(dp[i-1][0],dp[i-1][1]+1)+1;
                dp[i][1]=min(dp[i-1][0],dp[i-1][1])+2;
            }
        }

        printf("%d\n",dp[n-1][0]);//必须关闭状态
    }
    return 0;
}
时间: 2025-01-16 08:04:10

【HDU 2577】How to Type的相关文章

【HDU 5828】Rikka with Sequence(线段树)

[HDU 5828]Rikka with Sequence(线段树) Rikka with Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2311    Accepted Submission(s): 391 Problem Description As we know, Rikka is poor at math.

【HDU 4352】 XHXJ&#39;s LIS (数位DP+状态压缩+LIS)

XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2422    Accepted Submission(s): 990 Problem Description #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then careful

【HDU 4940】Destroy Transportation system(数据水/无源无汇带上下界可行流)

Description Tom is a commander, his task is destroying his enemy’s transportation system. Let’s represent his enemy’s transportation system as a simple directed graph G with n nodes and m edges. Each node is a city and each directed edge is a directe

【HDU 1009】FatMouse&#39; Trade

题 Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean. The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of c

【HDU 5647】DZY Loves Connecting(树DP)

pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 332    Accepted Submission(s): 112 Problem Description DZY has an unroote

【2014 Multi-University Training Contest 3 1002】/【HDU 4888】 Redraw Beautiful Drawings

不容易啊,终于可以补第二个题了!! 顺便说一句:模版写残了就不要怪出题人啊 ~ (这残废模版研究了好长时间才找出错) 题目大意: 有一个n*m的矩阵,每一个格子里都将有一个数.给你每一行数字之和和每一列数字之和.求每一个位置能填0~k之间的哪个数.如果有多种可能输出"Not Unique",如果没有解输出"Impossible",如果一组解则将其输出. 解题思路: 最大流: 不可能的条件:是行之和和列之和不想等或者建图后的最大流与他们不想等. 多组的条件是:在最大流

【HDU 1839】 Delay Constrained Maximum Capacity Path(二分+最短路)

[HDU 1839] Delay Constrained Maximum Capacity Path(二分+最短路) Delay Constrained Maximum Capacity Path Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1515    Accepted Submission(s): 481 Problem

【HDU 5811】Colosseo(拓扑+输入优化)

[HDU 5811]Colosseo(拓扑+输入优化) Colosseo Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 446    Accepted Submission(s): 98 Problem Description Mr. Chopsticks keeps N monsters, numbered from 1 to N.

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

pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 593    Accepted Submission(s): 179 Problem Description NPY's girlfriend blew him out!H