QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#504979#9107. Zayin and CountXunwuqishi#RE 0ms0kbC++232.5kb2024-08-04 17:59:292024-08-04 17:59:30

Judging History

This is the latest submission verdict.

  • [2024-08-04 17:59:30]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2024-08-04 17:59:29]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define int unsigned long long

const int N = 1e6+10;
int INF  = 1e9;
//int mod = 1e9+7;
//int mod =  1e9+7;
//int ways[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};

int n,m,na;
int a[20],b[20],t[20],sa[20];
map<int,int> ma,mb;
string ta;

void solve() {
    ma.clear();
    mb.clear();

    for(int i = 0;i<=9;i++) cin>>a[i];
    int ca = 0;
    for(int i = 0;i<=9;i++){
        if(a[i]) ma[i] = ca++;
    }

    for(int i = 0;i<=9;i++) cin>>b[i];
    cin>>ta;

    for(int i = 0;i<ta.size();i++) na = na*10+ta[i] - '0';

    int num = 0;

    if(a[0] == 1){

        for(int i = 0;i<ta.size();i++){
            num = num*ma.size() + ma[ta[i]-'0'];
        }

    }
    else{
        int p = ma.size();
        sa[0] = 1;
        sa[1] = ma.size();

        for(int i = 2;p<na;i++){
            p *= ma.size();
            sa[i] = p+sa[i-1];
            if(sa[i]*ma.size() >= na) break;
        }

        int len = ta.size();

        for(int i = 0;i<len;i++){
            num += (ma[ (ta[len-i-1]-'0') ]+1)*sa[i];
        }

    }

    string ans = "";

    if(b[0] == 1){
        if(a[0] == 0) num--;
        int cb = 0;
        for(int i = 0;i<=9;i++){
            if(b[i]) mb[cb++] = i;
        }


        if(num == 0) ans += mb[0]+'0';

        while(num){
            ans = (char)(mb[num%mb.size()]+'0') + ans;
            num /= mb.size();
        }
    }
    else{

        if(a[0] == 1) num++;
        
        int cb = 1;
        for(int i = 0;i<=9;i++){
            if(b[i]) mb[cb++] = i;
        }

        if(num == 0) ans += mb[0]+'0';
        int p = 1,loc = 1;

        while(p<=num){
            t[loc] = p;
            p*=mb.size();
            loc++;
        }

        t[1] = 0;
        for(int i = 1;i<=loc;i++) t[i] += t[i-1];
        t[1] = 1;

        while(num){
            p = t[loc];
            int x = num/p;
            if(x == 0){
                loc--;
                continue;
            }
            if(num%p == 0 && loc != 1) x-=1;

            ans += (char)(mb[x]+'0');
            num -= x*p;
            loc--;
        }
    }

    cout<<ans<<endl;
    return;

}
signed main() {
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    //cout<<fixed<<setprecision(8);
    int caset = 1;
    cin>>caset;

    for(int i = 1;i<=caset;i++){
        //cout<<"Case "<<i<<": "<<endl;
		solve();
	}

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Runtime Error

input:

10000
1 0 0 0 1 1 0 0 0 1
0 0 1 0 1 1 1 1 0 0
950595954440050004054505054050
1 0 0 0 1 1 1 1 0 0
1 1 1 0 1 0 0 0 1 1
45467007076660767550460064
1 1 1 1 0 0 0 1 0 0
1 1 0 1 1 0 1 0 0 1
23373171320213300170200722
0 0 0 0 1 1 1 0 1 0
0 0 1 0 0 1 0 1 1 1
558565664666565565558468668484
1 1 0 0 1 0 1 0 1 ...

output:

4554652222445626425476
41990991999414091249949
101364364636933104003903
5855770
575255220
1070606600106771761670177770607
5666655565550

result: