CSP 202112-3 登机牌条码 40分

2022.3.4 练习 CSP 202112-3 登机牌条码
之前在考场上只拿了20分,就是因为没仔细看题:在编码开始时,编码器处于大写字母模式,没有考虑这个情况。。。血泪啊
在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
const int MAX=1e5+10;
const int mod=1e6;
#define ll long long


int main()
{
    std::ios::sync_with_stdio(false);
    ll w,s;
    cin>>w>>s;
    string str;
    cin>>str;
    vector<int> num;
    for(int i=0;i<str.size();i++)
    {
        if(i==0 && (str[i]>='a' && str[i]<='z' ))
        {
            num.push_back(27);
        }
        if(i==0 && (str[i]>='0' && str[i]<='9' ))
        {
            num.push_back(28);
        }
        if(str[i]>='A' && str[i]<='Z')
        {
            int t=str[i]-'A';
            num.push_back(t);
        }
        else if(str[i]>='a' && str[i]<='z')
        {
             int t=str[i]-'a';
             num.push_back(t);
        }
        else if(str[i]>='0' && str[i]<='9')
        {
             int t=str[i]-'0';
             num.push_back(t);
        }
        // A -> 0
        if(i<str.size()-1 &&(str[i]>='A' && str[i]<='Z') && (str[i+1]>='0' && str[i+1]<='9'))
        {
            num.push_back(28);
        }
        //A -> a
        else if (i<str.size()-1 && (str[i]>='A' && str[i]<='Z') && (str[i+1]>='a' && str[i+1]<='z'))
        {
            num.push_back(27);
        }
        //a -> 0
        else if (i<str.size()-1 && (str[i]>='a' && str[i]<='z') && (str[i+1]>='0' && str[i+1]<='9'))
        {
            num.push_back(28);
        }
        //a -> A
        else if (i<str.size()-1 && (str[i]>='a' && str[i]<='z') && (str[i+1]>='A' && str[i+1]<='Z'))
        {
            num.push_back(28);
            num.push_back(28);
        }
        //0 -> a
        else if (i<str.size()-1 && (str[i]>='0' && str[i]<='9') && (str[i+1]>='a' && str[i+1]<='z'))
        {
            num.push_back(27);
        }
        //0 -> A
        else if (i<str.size()-1 && (str[i]>='0' && str[i]<='9') && (str[i+1]>='A' && str[i+1]<='Z'))
        {
            num.push_back(28);
        }

    }
    if(num.size()%2==1)
    {
        num.push_back(29);
    }
    vector<int>::iterator it =num.begin();
    vector<int> mazi;
    for(;it!=num.end();it+=2)
    {
        //cout<<*it<<" "<<*(it+1)<<" ";
        ll tmp=(*it)*30+(*(it+1));
        mazi.push_back(tmp);

    }
    //cout<<endl;
    ll len1=1+mazi.size();
    ll len=len1;
    if(s==-1)
    {
        if(len%w!=0)
        {
           ll tmp=len1/w;
           len=w*(tmp+1);
           for(int i=len1;i<len;i++)
           {
              mazi.push_back(900);
           }
         }
    }
    cout<<len<<endl;
    vector<int>::iterator it1 =mazi.begin();
    for(;it1!=mazi.end();it1++)
    {
        cout<<*it1<<endl;
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值