0
点赞
收藏
分享

微信扫一扫

CSP202112-3登机牌条码

夏木之下 2022-04-13 阅读 37
c++

原题太长就挂个链接CSP202112-3登机牌条码

代码

#include<bits/stdc++.h>
using namespace std;
vector<int>c;
vector<int>b;


int main()
{
    int w=0,s=0,i=0,flag=0,flag1=1,j=0,k=0,x=0;
    string a;
    cin>>w>>s;
    cin>>a;
    if(s!=-1)
    k=pow(2,s+1);
    for(j=0;;j++)
    {
        if(a[j]=='\0')
        break;
        if(a[j]>='A'&&a[j]<='Z')
        {
           if(flag1==2)
           {
               b.push_back(28);
               b.push_back(27);
               flag+=2;
           }
          if(flag1==3)
           {
               b.push_back(27);
               flag++;
           }
           b.push_back(a[j]-'A');
           flag1=1;
           flag++;
        }
        if(a[j]>='a'&&a[j]<='z')
        {
           if(flag1!=2)
           {
               b.push_back(27);
               flag++;
           }
           b.push_back(a[j]-'a');
           flag1=2;
           flag++;
        }
        if(a[j]>='0'&&a[j]<='9')
        {
           if(flag1!=3)
           {
                b.push_back(28);
                flag++;
           }
           b.push_back(a[j]-'0');
           flag1=3;
           flag++;
        }
    }
    if(flag%2!=0)
    {
         b.push_back(29);
         flag=flag/2+1;
    }
    x=w-(flag+1+k)%w;
    c.push_back(flag+1+x);
    for(i=0,j=1;j<=flag;i=i+2,j++)
    {
        c.push_back(b[i]*30+b[i+1]);
    }
    for(i=0;i<x;i++)
    c.push_back(900);
    if(k!=0)
    {
        vector<int> gx(k+1);
   for( i=0;i<k+1;i++)
	gx[i] = 0;
    gx[k] = -3;
    gx[k-1] = 1;
   int temp = -9;
   for( i=0;i<k-1;i++)
 {
	vector<int> tt(k+1);
	for( j = k-i-1;j<=k;j++)
		tt[j] = gx[j];
	for( j=k-i-1;j<=k;j++)
	{
		gx[j] = ((gx[j] % 929) * (temp % 929))%929;
	}
	for(j=k-i-1;j<k;j++)
	{
		gx[j] = (gx[j] %929 + tt[j+1]%929)%929;
	}
	gx[k-i-2] = 1;
	temp *= 3;
	temp %= 929;
}
    vector<int>dx(c.size()+k,0);
    for(i=0;i<c.size();i++)
    {
        dx[i]=c[i]%929;
    }
    for(i=0;i<c.size();i++)
    {
        int t=dx[i];
        for(j=0;j<gx.size();j++)
        {
            dx[i+j] =(dx[i+j]-(gx[j]*t)%929)%929;
        }
    }
    for(i=dx.size()-gx.size()+1;i<dx.size();i++)
    {
        if(-dx[i]<0)
           c.push_back(929+(-dx[i]%929));
        else
           c.push_back(-dx[i]%929);
    }

    }

    for(i=0;i<c.size();i++)
    {

        cout<<c[i]<<endl;
    }
    return 0;
}
举报

相关推荐

0 条评论