子任务2wa求hack
查看原帖
子任务2wa求hack
305926
qwq_it_is_me楼主2023/3/19 10:05

rt

实现思路:

aa 数组存储高精度数据,每个数据的高32位用来进位

head 一个数据存储a的末尾位置,即模拟一个指针

a数组前留存 10032100*32 位的空白,便于2运算

主要问题就是subtask 2 没过,求hack /bx

#include<iostream>
using namespace std;
#define ll long long

ll a[15000];//low 32 bit for storage, high 32 bit for carry

void hbtPrtBin(ll x){
    for(int i = 31; i>=0; i--){
        if(x&1<<i) printf("1"); else printf("0");
    }
    return;
}

int main(){
    //freopen("input.txt", "r", stdin);
    int T;
    cin>>T;
    while(T--){
        for(int i = 0; i<= 14900;i++) a[i] = 0ll;
        ll head=100*32;
        int n;
        cin>>n;
        while(n--){
            int op;
            scanf("%d", &op);
            if(op == 1){
                head++;
            }
            else{
                ll d;
                scanf("%d", &d);
                //ll pos = head%32;//bit pos
                ll piv = (head-1)/32+1;//index in array
                ll pos = 32*(piv) - head;
                a[piv]+=d<<pos;
                for(ll i = piv; a[i] > (ll)0xffffffff; i--){
                    ll carry = a[i]>>32;
                    a[i-1] += carry;
                    a[i] -= carry<<32; //2^33-1
                }
            }
            continue;
        }
        ll i=0,j=0;
        //if(i<0) i = 0;
        //ll pos = head%32;//bit position
        ll piv = (head-1)/32+1;//index in array
        ll pos = 32*(piv) - head;
        while(a[i]==0&&i<=piv) i++;

        for(j = 33; j>=0; j--)
            if(a[i] & (1ll<<j)) break;
        for(j=j; j>=0; j--) {
            if(a[i]&(1ll<<j)) printf("1"); else printf("0");
        }
        //ll prev_i = i;
        for(i++; i<piv; i++){
            hbtPrtBin(a[i]);
        }
        //if(prev_i == i) continue;
//        if(a[i] = 0){
//            printf("0");
//            continue;
//        }

        if(i>piv){continue;}

        for(j = 31; j>=pos; j--){
            if(a[i]&1ll<<j) printf("1"); else printf("0");
        }
        printf("\n");
    }
    //system("pause");
    return 0;
}
2023/3/19 10:05
加载中...