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;
}