zoukankan      html  css  js  c++  java
  • codeforces 1B Spreadsheets 解题报告

    题目大意:
      用26个大写字母A~Z代表1~26,例如A是1,B是2,Z是26,AA是27;  
      由于没有代表0的字母,因此就有例如AAAA!=0.5*BAAA;因为AAAA=26^3+26^2+26+1,而BAAA=2*26^3+26^2+26+1;
      因此先求出n的位数m,然后构造出AA..A(m个A),然后在每个位置上取最大值。
    代码:
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    int n;
    char s[20];
    char ans[20];
    int sum[20],f[20];
    
    void convert(int col);
    int main()
    {
        cin>>n;
        sum[0]=f[0]=1;
        for(int i=1;i<20;i++)
        {
            f[i]=26*f[i-1];
            sum[i]=sum[i-1]+f[i];
            if(sum[i]>1000000) break;
        }
        while(n--)
        {
            memset(s,'',sizeof(s));
            scanf("%s",s);
            int len=strlen(s);
            if(s[0]=='R')
            {
                int i=1;
                while(s[i]>='0' && s[i]<='9' && i<len) i++;
                if(i<len && s[i]=='C' && s[i-1]>='0' && s[i-1]<='9' && s[i+1]>='0' && s[i+1]<='9')//
                {
    
                    int c=i+1;  int col=0;   int tmp=1;
                    while(c<len)
                    {
                        col=col*10+s[c]-'0';
                        c++;
    
                    }
                    convert(col);
                    printf("%s",ans);
                    for(int k=1;k<i;k++) cout<<s[k];
                }
                else
                {
    
                    int in=0; int col=0,tmp=1;
                    while(s[in]<'0' || s[in]>'9')
                    {
                        col=col*26+s[in]-'A'+1;
                         in++;
                    }
                    cout<<"R";
                    while(in<len) { cout<<s[in]; in++; } cout<<"C";
                    cout<<col;
                }
            }
            else
            {
    
                    int in=0; int col=0,tmp=1;
                    while((s[in]<'0' || s[in]>'9') && in<len)
                    {
                        col=col*26+s[in]-'A'+1;
                         in++;
                    }
                    cout<<"R";
                    while(in<len) { cout<<s[in]; in++; } cout<<"C";
                    cout<<col;
            }
            cout<<endl;
        }
        return 0;
    }
    void convert(int col)
    {
        memset(ans,'',sizeof(ans));
        int i=1,slen=1,cnt=0;
        while(col>sum[i]) {slen++; i++; }
        col=col-sum[i-1]; 
        while(slen--)
        {
            ans[cnt++]=col/f[slen]+'A';
            col%=f[slen];
        }
    }
  • 相关阅读:
    EBS Form菜单栏增加选项
    Oracle EBS 基础概念:弹性域-上下文字段
    EBS apps, applsys 的关系及密码更改
    设计模式-建造者模式
    微服务入门
    常见SQL编写和优化
    java 8 stream toMap问题
    mysql8.0.22在centos7.6下的简单安装
    mysql8的collate问题和修改
    springboot+security自定义登录-1-基础-自定义用户和登录界面
  • 原文地址:https://www.cnblogs.com/au-xiaotian/p/3369995.html
Copyright © 2011-2022 走看看