2 条题解

  • 0
    @ 2022-08-09 19:18:12

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #define MAXN 1010
    using namespace std;
    int a[MAXN],n,step,b[MAXN],c[MAXN];
    char p,s[MAXN];

    inline bool pd()
    {
    if(a[0]%2==0)
    {
    int i=1,j=a[0];
    while(i<=j)
    {
    if(a[i]!=a[j])
    return false;
    i++;j--;
    }
    return true;
    }
    else
    {
    int i=1,j=a[0];
    while(i!=j)
    {
    if(a[i]!=a[j])
    return false;
    i++;j--;
    }
    return true;
    }
    }
    inline void pluss()
    {
    b[0]=a[0];
    for(int i=a[0];i>=1;i--)
    b[i]=a[a[0]-i+1];
    c[0]=++a[0];
    for(int i=1;i<=a[0];i++)
    {
    c[i]+=a[i]+b[i];
    if(c[i]>=n)
    {
    c[i+1]+=c[i]/n;
    c[i]%=n;
    }
    }
    while(c[0]>0&&!c[c[0]])
    c[0]--;
    for(int i=0;i<=c[0];i++)
    a[i]=c[i];
    for(int i=c[0];i>=0;i--)
    b[i]=c[i]=0;
    }
    int main() {
    cin>>n;
    cin>>s;
    int len=strlen(s);
    for(int i=len-1;i>=0;i--)
    {
    if(s[i]>='0'&&s[i]<='9')
    a[++a[0]]=s[i]-'0';
    else if(s[i]=='A')
    a[++a[0]]=10;
    else if(s[i]=='B')
    a[++a[0]]=11;
    else if(s[i]=='C')
    a[++a[0]]=12;
    else if(s[i]=='D')
    a[++a[0]]=13;
    else if(s[i]=='E')
    a[++a[0]]=14;
    else if(s[i]=='F')
    a[++a[0]]=15;
    }
    while(!pd())
    {
    if(step>30)
    {
    printf("Impossible!\n");
    return 0;
    }
    pluss();
    step++;
    }
    cout<<"STEP="<<step;
    return 0;
    }

  • 0
    @ 2022-08-04 15:31:26

    /*
    先处理进制数
    然后用高精加法来加每一次的数 (因为有16进制 T_T)
    然后在判断是不是回文数

    */
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #define MAXN 1010
    using namespace std;
    int a[MAXN],n,step,b[MAXN],c[MAXN];
    char p,s[MAXN];

    inline bool pd() {
    if(a[0]%2==0) {
    int i=1,j=a[0];
    while(i<=j) {
    if(a[i]!=a[j]) return false;
    i++;j--;
    }
    return true;
    }
    else {
    int i=1,j=a[0];
    while(i!=j) {
    if(a[i]!=a[j]) return false;
    i++;j--;
    }
    return true;
    }
    }
    inline void pluss() {
    b[0]=a[0];
    for(int i=a[0];i>=1;i--) b[i]=a[a[0]-i+1];
    c[0]=++a[0];
    for(int i=1;i<=a[0];i++) {
    c[i]+=a[i]+b[i];
    if(c[i]>=n) {
    c[i+1]+=c[i]/n;
    c[i]%=n;
    }
    }
    while(c[0]>0&&!c[c[0]]) c[0]--;
    for(int i=0;i<=c[0];i++) a[i]=c[i];
    for(int i=c[0];i>=0;i--) b[i]=c[i]=0;
    }
    int main() {
    scanf("%d",&n);
    cin>>s;
    int len=strlen(s);
    for(int i=len-1;i>=0;i--) {
    if(s[i]>='0'&&s[i]<='9') a[++a[0]]=s[i]-'0';
    else if(s[i]=='A') a[++a[0]]=10;
    else if(s[i]=='B') a[++a[0]]=11;
    else if(s[i]=='C') a[++a[0]]=12;
    else if(s[i]=='D') a[++a[0]]=13;
    else if(s[i]=='E') a[++a[0]]=14;
    else if(s[i]=='F') a[++a[0]]=15;
    }
    while(!pd()) {
    if(step>30) {
    printf("Impossible!\n");
    return 0;
    }
    pluss();
    step++;
    }
    printf("STEP=%d\n",step);
    return 0;
    }

  • 1

信息

ID
1134
难度
5
分类
模拟 点击显示
标签
递交数
196
已通过
62
通过率
32%
上传者