답안 #1008492

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1008492 2024-06-26T13:25:18 Z Unforgettablepl Ancient Machine (JOI21_ancient_machine) C++17
0 / 100
49 ms 9932 KB
#include "Anna.h"
#include <vector>
#include <bits/stdc++.h>
using namespace std;

namespace {
    int convert(vector<int> arr){
        int num = 0;
        for(int&i:arr){
            num*=3;
            num+=i;
        }
        return num;
    }
}

void Anna(int N, std::vector<char> S) {
    for(int i=N;i<100000;i++)S.emplace_back('X');
    for(int block = 0;block<100000;block+=5){
        vector<int> arr;
        for(int i=0;i<5;i++){
            if(S[i+block]=='X')arr.emplace_back(0);
            if(S[i+block]=='Y')arr.emplace_back(1);
            if(S[i+block]=='Z')arr.emplace_back(2);
        }
        int res = convert(arr);
        for(int bit=0;bit<8;bit++)Send(min(1,res&(1<<bit)));
    }
}
#include "Bruno.h"
#include <vector>
#include <bits/stdc++.h>
using namespace std;

namespace {
vector<int> convert(int x){
    vector<int> ans;
    for(int i=0;i<5;i++){
        ans.emplace_back(x%3);
        x/=3;
    }
    reverse(ans.begin(),ans.end());
    return ans;
}
}  // namespace

void Bruno(int N, int L, std::vector<int> A) {
    vector<int> arr;
    for(int i=0;i<160000;i+=8){
        int num=0;
        for(int bit=0;bit<8;bit++){
            num |= (A[i+bit]<<bit);
        }
        auto curr = convert(num);
        for(int&i:curr)arr.emplace_back(i);
    }
    arr.resize(N);
    list<pair<int,int>> curr = {{arr[0],0}};
    for(int i=1;i<N;i++)if(arr[i]==curr.back().first)Remove(i);
        else curr.emplace_back(arr[i],i);
    while(!curr.empty() and curr.front().first!=0){
        Remove(curr.front().second);
        curr.erase(curr.begin());
    }
    while(!curr.empty() and curr.back().first!=2){
        Remove(curr.back().second);
        curr.erase(--curr.end());
    }
    if(curr.empty())return;
    int last = 1;
    auto iter = curr.begin();
    while(iter!=curr.end()){
        if(iter->first==0){
            if(last==2){
                Remove(iter->second);
                iter = curr.erase(iter);
            } else {
                last = 0;
                iter++;
            }
        } else if(iter->first==1){
            iter++;
            last = 1;
        } else if(iter->first==2){
            if(last==0){
                if(iter->second==curr.back().second){
                    iter--;
                    Remove(iter->second);
                    iter = curr.erase(iter);
                    iter++;
                    continue;
                }
                Remove(iter->second);
                iter = curr.erase(iter);
            } else {
                last = 2;
                iter++;
            }
        }
    }
    if(curr.empty())return;
    if(curr.front().first!=0){
        Remove(curr.front().second);
        return;
    }
    iter = curr.begin();
    while(iter!=curr.end()){
        if(iter->first!=1){iter++;continue;}
        auto prev = iter++;
        if(iter->first==2){
            Remove(prev->second);
            assert(iter==curr.erase(prev));
            if(iter->second==curr.back().second){
                iter++;
            } else {
                Remove(iter->second);
                iter = curr.erase(iter);
            }
        } else iter++;
    }
    curr.reverse();
    iter = ++curr.begin();
    while(iter!=curr.end()){
        Remove(iter->second);
        iter = curr.erase(iter);
    }
    Remove(curr.front().second);
    curr.erase(curr.begin());
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 19 ms 4156 KB Wrong Answer [6]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 49 ms 9932 KB Wrong Answer [6]
2 Halted 0 ms 0 KB -