zoukankan      html  css  js  c++  java
  • CodeForces 758 D Ability To Convert

    Ability To Convert

    题意:给你一个n进制的60位的数,但是由于Alexander只会写0->9,所以他就会用10来表示十而不是A(假设进制>10);

    题解:模拟就好了,先走往前走进制的位数的倍数,再判断一下首位是不是0,或者这个数有没有大于等于进制,如果有就不行,就要往后走,走到一个非0开头的点,或者就是走到只有1个0的点,然后算出目前这段区间的答案加一个倍数就好了。

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
     4 #define LL long long
     5 #define ULL unsigned LL
     6 #define fi first
     7 #define se second
     8 #define pb push_back
     9 #define lson l,m,rt<<1
    10 #define rson m+1,r,rt<<1|1
    11 #define max3(a,b,c) max(a,max(b,c))
    12 #define min3(a,b,c) min(a,min(b,c))
    13 typedef pair<int,int> pll;
    14 const int INF = 0x3f3f3f3f;
    15 const LL mod =  (int)1e9+7;
    16 const int N = 2e5 + 100;
    17 char str[N];
    18 char cmp[N];
    19 LL ans = 0;
    20 LL tmp = 0;
    21 LL n = 0;
    22 LL base = 1;
    23 LL b = 1;
    24 LL t;
    25 vector<LL> vc;
    26 int main(){
    27     scanf("%s", cmp);
    28     int len1 = strlen(cmp);
    29     for(int i = 0; i < len1; i++){
    30         n = n*10 + cmp[i] - '0';
    31     }
    32     scanf("%s", str);
    33     if(str[0] == '0'){
    34         cout << 0 << endl;
    35         return 0;
    36     }
    37     int len2 = strlen(str);
    38     for(int i = len2-1; i >= 0;){
    39         int j = i - len1 + 1;
    40         if(j < 0) j = 0;
    41         //cout << j <<' '<< i << endl;
    42         if((j+len1-1 == i && strcmp(cmp,str+j) <= 0) || str[j] == '0'){
    43             j++;
    44             if(j >= i) j = i;
    45             while(str[j] == '0' && j < i) j++;
    46             t = 0;
    47             for(int k = j; k <= i; k++)
    48                 t = t*10 + str[k] - '0';
    49             ans += b*t;
    50             b *= n;
    51         }
    52         else {
    53             t = 0;
    54             for(int k = j; k <= i; k++)
    55                 t = t*10 + str[k] - '0';
    56             ans += b*t;
    57             b *= n;
    58         }
    59         i = j - 1;
    60     }
    61     printf("%I64d", ans);
    62     return 0;
    63 }
    CF 758 D
  • 相关阅读:
    spring boot 中使用redis session
    关于 JVM 内存的 N 个问题(转)
    在JAVA中记录日志的十个小建议
    spring boot jpa 多数据源配置
    python高性能web框架——Japronto
    毕业 3 年,为何技术能力相差越来越大?——转自阿里技术人生
    如何成为技术大牛——阿里CodeLife
    布式之数据库和缓存双写一致性方案解析(转)
    海量数据存储--分库分表策略详解 (转)
    Linux内核模块简单示例
  • 原文地址:https://www.cnblogs.com/MingSD/p/9102883.html
Copyright © 2011-2022 走看看