답안 #935637

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
935637 2024-02-29T10:04:08 Z steveonalex Ancient Machine (JOI21_ancient_machine) C++17
99 / 100
50 ms 8332 KB
#include <bits/stdc++.h>
#include "Anna.h"

using namespace std;

namespace Nigga{
typedef long long ll;
typedef unsigned long long ull;

#define MASK(i) (1LL << (i))
#define GETBIT(mask, i) (((mask) >> (i)) & 1)
#define ALL(v) (v).begin(), (v).end()

ll max(ll a, ll b){return (a > b) ? a : b;}
ll min(ll a, ll b){return (a < b) ? a : b;}

ll LASTBIT(ll mask){return (mask) & (-mask);}
int pop_cnt(ll mask){return __builtin_popcountll(mask);}
int ctz(ll mask){return __builtin_ctzll(mask);}
int logOf(ll mask){return __lg(mask);}

mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
ll rngesus(ll l, ll r){return l + (ull) rng() % (r - l + 1);}

template <class T1, class T2>
    bool maximize(T1 &a, T2 b){
        if (a < b) {a = b; return true;}
        return false;
    }

template <class T1, class T2>
    bool minimize(T1 &a, T2 b){
        if (a > b) {a = b; return true;}
        return false;
    }

template <class T>
    void printArr(T& container, string separator = " ", string finish = "\n"){
        for(auto item: container) cout << item << separator;
        cout << finish;
    }


template <class T>
    void remove_dup(vector<T> &a){
        sort(ALL(a));
        a.resize(unique(ALL(a)) - a.begin());
    }



ll dp[64];
void prepare(){
    dp[0] = 1; dp[1] = 2;
    for(int i = 2; i<64; ++i) {
        dp[i] = dp[i-1] + dp[i-2];
        // cout << dp[i] << " ";
    }
    // cout << "\n";
}

}

// void Send(int d){cout << d << ", ";}

void Anna(int N, vector<char> S){
typedef long long ll;
typedef unsigned long long ull;
    int n = N;
    vector<int> a;
    for(int i = 0; i<n; ++i) a.push_back(S[i] - 'X');

    Nigga::prepare();
    
    vector<bool> ans(n);
    int idx = -1;
    for(int i = 0; i<n; ++i) if (a[i] == 0){
        ans[i] = 1;
        idx = i;
        break;
    }

    if (idx != -1){
        for(int i = idx + 1; i<n; ++i) if (a[i] == 2 && (i == n - 1 || a[i+1] != 2)){
            ans[i] = 1;
        }
    }
    bool real = false;
    for(int i = 1; i<n; ++i) if (ans[i] && ans[i-1]){
        ans[i] = false;
        real = true;
    }

    while(ans.size() % 64) ans.push_back(0);
    for(int i = 0; i<ans.size(); i += 64){
        ll s = 0;
        for(int j = 0; j<64; ++j) if (ans[i + j]) s += Nigga::dp[j];

        for(int j = 0; j<45; ++j) {
            Send(s % 2);
            s /= 2;
        }
    }
    Send(real);
}

// int main(void){
//     Anna(97, {'X', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z'});
//     return 0;
// }
#include <bits/stdc++.h>
#include "Bruno.h"

using namespace std;

namespace Ligma{

typedef long long ll;
typedef unsigned long long ull;
#define MASK(i) (1LL << (i))
#define GETBIT(mask, i) (((mask) >> (i)) & 1)
#define ALL(v) (v).begin(), (v).end()

ll max(ll a, ll b){return (a > b) ? a : b;}
ll min(ll a, ll b){return (a < b) ? a : b;}

ll LASTBIT(ll mask){return (mask) & (-mask);}
int pop_cnt(ll mask){return __builtin_popcountll(mask);}
int ctz(ll mask){return __builtin_ctzll(mask);}
int logOf(ll mask){return __lg(mask);}

mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
ll rngesus(ll l, ll r){return l + (ull) rng() % (r - l + 1);}

template <class T1, class T2>
    bool maximize(T1 &a, T2 b){
        if (a < b) {a = b; return true;}
        return false;
    }

template <class T1, class T2>
    bool minimize(T1 &a, T2 b){
        if (a > b) {a = b; return true;}
        return false;
    }

template <class T>
    void printArr(T& container, string separator = " ", string finish = "\n"){
        for(auto item: container) cout << item << separator;
        cout << finish;
    }


template <class T>
    void remove_dup(vector<T> &a){
        sort(ALL(a));
        a.resize(unique(ALL(a)) - a.begin());
    }

ll dp[64];
void prepare(){
	dp[0] = 1; dp[1] = 2;
    for(int i = 2; i<64; ++i) {
        dp[i] = dp[i-1] + dp[i-2];
        // cout << dp[i] << " ";
    }
    // cout << "\n";
}


}

// void Remove(int d){cout << "Remove: " << d << "\n";}

void Bruno(int N, int L, vector<int> A){
typedef long long ll;
typedef unsigned long long ull;
	Ligma::prepare();
    int n = N;
    vector<int> pos;
    int shit = 0;
    for(int i = 0; i<L-1; i += 45){
    	ll s = 0;
    	for(int j = 44; j>=0; --j) s = s * 2 + A[i+j];
    	for(int j = 63; j>=0; --j) if (Ligma::dp[j] <= s){
    		s -= Ligma::dp[j];
    		pos.push_back(shit + j);
    	}
    	shit += 64;
    }
    sort(ALL(pos));
    if (A.back()){
    	pos.push_back(pos[0] + 1);
    }
    sort(ALL(pos));
    // Ligma::printArr(pos);

    if (pos.empty()){
    	for(int i = 0; i<n; ++i) Remove(i);
    	return;
    }
    for(int i = 1; i<pos.size(); ++i){
    	for(int j = pos[i] - 1; j > pos[i-1]; --j) Remove(j);
    	Remove(pos[i]);
    }
    for(int i = 0; i<=pos[0]; ++i) Remove(i);
   	for(int i = pos.back() + 1; i<n; ++i) Remove(i);
}


// int main(void){
//     Bruno(97, 90, {{0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}});

//     return 0;
// }

Compilation message

Anna.cpp: In function 'void Anna(int, std::vector<char>)':
Anna.cpp:95:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<bool>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |     for(int i = 0; i<ans.size(); i += 64){
      |                    ~^~~~~~~~~~~
Anna.cpp:68:28: warning: typedef 'ull' locally defined but not used [-Wunused-local-typedefs]
   68 | typedef unsigned long long ull;
      |                            ^~~

Bruno.cpp: In function 'void Bruno(int, int, std::vector<int>)':
Bruno.cpp:92:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   92 |     for(int i = 1; i<pos.size(); ++i){
      |                    ~^~~~~~~~~~~
Bruno.cpp:67:28: warning: typedef 'ull' locally defined but not used [-Wunused-local-typedefs]
   67 | typedef unsigned long long ull;
      |                            ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 780 KB Output is correct
2 Correct 0 ms 792 KB Output is correct
3 Correct 0 ms 784 KB Output is correct
4 Correct 1 ms 792 KB Output is correct
5 Correct 0 ms 792 KB Output is correct
6 Correct 0 ms 792 KB Output is correct
7 Correct 0 ms 780 KB Output is correct
8 Correct 0 ms 784 KB Output is correct
9 Correct 0 ms 792 KB Output is correct
10 Correct 0 ms 784 KB Output is correct
11 Correct 1 ms 792 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 44 ms 8228 KB Partially correct
2 Partially correct 40 ms 8160 KB Partially correct
3 Partially correct 39 ms 8156 KB Partially correct
4 Partially correct 43 ms 8040 KB Partially correct
5 Partially correct 38 ms 8088 KB Partially correct
6 Partially correct 41 ms 8232 KB Partially correct
7 Partially correct 38 ms 8228 KB Partially correct
8 Partially correct 46 ms 8152 KB Partially correct
9 Partially correct 40 ms 8184 KB Partially correct
10 Partially correct 40 ms 8320 KB Partially correct
11 Partially correct 40 ms 8240 KB Partially correct
12 Partially correct 40 ms 8220 KB Partially correct
13 Partially correct 47 ms 8276 KB Partially correct
14 Partially correct 50 ms 8280 KB Partially correct
15 Partially correct 43 ms 8124 KB Partially correct
16 Partially correct 47 ms 8200 KB Partially correct
17 Partially correct 43 ms 8064 KB Partially correct
18 Partially correct 42 ms 8148 KB Partially correct
19 Partially correct 43 ms 8196 KB Partially correct
20 Partially correct 48 ms 8332 KB Partially correct
21 Partially correct 46 ms 8164 KB Partially correct
22 Partially correct 43 ms 8232 KB Partially correct
23 Partially correct 42 ms 8104 KB Partially correct
24 Partially correct 40 ms 8232 KB Partially correct
25 Partially correct 48 ms 8236 KB Partially correct
26 Partially correct 49 ms 8236 KB Partially correct
27 Partially correct 43 ms 8152 KB Partially correct
28 Partially correct 46 ms 8220 KB Partially correct
29 Partially correct 48 ms 8204 KB Partially correct
30 Partially correct 48 ms 8080 KB Partially correct
31 Partially correct 46 ms 8232 KB Partially correct
32 Partially correct 39 ms 8244 KB Partially correct
33 Partially correct 40 ms 8116 KB Partially correct