题解 CF656C 【Without Text】

简洁的题意:

读入一个字符串,将是大写的字符所在的英文字母表的索
引加到a中,将是小写的字符所在英文字母表的索引加到b
中,输出a-b

STL!!

首先,a索引是1,A也是1,我们需要通过map或者速度更快的unordered_map(unordered_map496ms,比map528ms快!)来储存英文字符索引

那么就是写52行初始化打表?no no no,可以借助for循环预处理,代码:

#include <iostream>
#include <unordered_map>
#include <cstring>
using namespace std;

unordered_map <char, int> small, big;

string s;

int main()
{
    //预处理
    small['a'] = 1;//先把a赋值
    for(char x = 'b'; x <= 'z'; x++)//从b开始
    {
        small[x] = small[x - 1] + 1;//像递推一样赋值
    }
    big['A'] = 1;//先把A赋值
    for(char x = 'B'; x <= 'Z'; x++)//从B开始
    {
        big[x] = big[x - 1] + 1;//像递推一样赋值
    }
    cin >> s;
    int a, b;
    a = b = 0;
    for(string::iterator it = s.begin(); it != s.end(); ++it)//既然string是STL库的就要用STL专门的迭代器,下标用多了stack,set我看你怎么用……
    {
        if(*it >= 'A' && *it <= 'Z')//如果是大写,加上big[*it]的
        {
            a += big[*it];//map就用下标吧,况且这里不是遍历不用迭代器
        }
        if(*it >= 'a' && *it <= 'z')//如果是小写,加上small[*it]的
        {
            b += small[*it];//map就用下标吧,况且这里不是遍历不用迭代器
        }
    }
    cout << a - b << endl;
    return 0;//求赞哦,再见
}

无耻求赞

posted @   HappyBobb  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示