Codeforces Round 863 (Div. 3) A-E 好题!标记一下

发布时间 2023-04-05 02:24:50作者: 雪之下,树之旁

比赛链接

E

进制转换好题。题目要求我们把含有 \(4\) 的数字挖掉。先考虑挖掉的不是 \(4\), 而是 \(9\).那我们要求的就是编号为 \(k\), 仅由 \(0 -- 8\) 组成的数字。这实际上就是求其在九进制下的表达形式。那么在挖去 \(4\) 的时候,类似地,我们就是用 \(0 - 3, 5 - 9\) 共八个数字来表达我们的 \(k\)。所以在转化成 \(9\) 进制以后,大于等于 \(4\) 的数字加一即可。

#include <bits/stdc++.h>
using namespace std;
#define N 1000010
#define ll long long

template <class T>
inline void read(T& a){
    T x = 0, s = 1;
    char c = getchar(); 
    while(!isdigit(c)){ if(c == '-')  s = -1; c = getchar(); }
    while(isdigit(c)){ x = x * 10 + (c ^ '0'); c = getchar(); }
    a = x * s;
    return ; 
}

int main(){
    int T; read(T);
    while(T--){
        ll n; read(n); 
        ll tmp = n; 
        int num = 0; 
        vector <int> G; 
        while(tmp > 0){
            num++; 
            G.push_back(tmp % 9); 
            tmp /= 9; 
        }
        for(int i = G.size() - 1; i >= 0; i--){
            if(G[i] >= 4) G[i]++; 
            printf("%d", G[i]); 
        }
        cout << endl; 
    }
    return 0; 
}