Submission #1266992

#TimeUsernameProblemLanguageResultExecution timeMemory
1266992axleofapulleyData Transfer (IOI19_transfer)C++20
0 / 100
6 ms1728 KiB
#include<bits/stdc++.h>
#include "transfer.h"
using namespace std;
vector<int> get_attachment(vector<int> source){
    if(source.size()==63){
        vector<int> ans; ans.assign(7, 0); for(int i = 0; i < 7; i++) ans[i]=0; 
        for(int i = 0; i < 63; i++){
            for(int j = 0; j < 6; j++){
                if(i&(1<<j)){
                    ans[j]=(ans[j]+source[i])%2;
                }
            }
        }
        for(int i = 0; i < 6; i++) ans[6]=(ans[6]+ans[i])%2;
        return ans;
    }
    else{
        vector<int> ans; ans.assign(9, 0); for(int i = 0; i < 9; i++) ans[i]=0; 
        for(int i = 0; i < 255; i++){
            for(int j = 0; j < 8; j++){
                if(i&(1<<j)){
                    ans[j]=(ans[j]+source[i])%2;
                }
            }
        }
        for(int i = 0; i < 8; i++) ans[8]=(ans[8]+ans[i])%2;
        return ans;
    }
}
vector<int> retrieve(vector<int> data){
    if(data.size()==70){
        int check = 0; for(int i = 63; i < 69; i++) check=(check+data[i])%2; 
        if(check!=data[69]){
            vector<int> final; final.assign(63, 0); for(int i = 0; i < 63; i++) final[i]=data[i]; 
            return final;
        }
        else{
            int arr[6]; for(int i = 0; i < 6; i++) arr[i]=0; 
            for(int i = 0; i < 63; i++){
                for(int j = 0; j < 6; j++){
                    if(i&(1<<j)) arr[j]=(arr[j]+data[i])%2; 
                }
            }
            bool c = true; for(int i = 0; i < 6; i++) if(arr[i]!=data[63+i]) c = false; 
            if(c){
                vector<int> final; final.assign(63, 0); for(int i = 0; i < 63; i++) final[i]=data[i]; 
                return final;
            }
            else{
                int error = 0; 
                for(int i = 0; i < 6; i++){
                    if(arr[i]!=data[63+i]) error+=(1<<i);
                }
                data[error]=1-data[error]; 
                vector<int> final; final.assign(63, 0); for(int i = 0; i < 63; i++) final[i]=data[i]; 
                return final;
            }
        }
    }
    else{
        int check = 0; for(int i = 255; i < 263; i++) check=(check+data[i])%2; 
        if(check!=data[263]){
            vector<int> final; final.assign(255, 0); for(int i = 0; i < 255; i++) final[i]=data[i]; 
            return final;
        }
        else{
            int arr[8]; for(int i = 0; i < 8; i++) arr[i]=0; 
            for(int i = 0; i < 255; i++){
                for(int j = 0; j < 8; j++){
                    if(i&(1<<j)) arr[j]=(arr[j]+data[i])%2; 
                }
            }
            bool c = true; for(int i = 0; i < 8; i++) if(arr[i]!=data[255+i]) c = false; 
            if(c){
                vector<int> final; final.assign(255, 0); for(int i = 0; i < 255; i++) final[i]=data[i]; 
                return final;
            }
            else{
                int error = 0; 
                for(int i = 0; i < 8; i++){
                    if(arr[i]!=data[255+i]) error+=(1<<i);
                }
                data[error]=1-data[error]; 
                vector<int> final; final.assign(255, 0); for(int i = 0; i < 255; i++) final[i]=data[i]; 
                return final;
            }
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...