Submission #935646

# Submission time Handle Problem Language Result Execution time Memory
935646 2024-02-29T10:19:26 Z steveonalex Ancient Machine (JOI21_ancient_machine) C++17
98 / 100
50 ms 8480 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[75];
void prepare(){
    dp[0] = 1; dp[1] = 2;
    for(int i = 2; i<75; ++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() % 75) ans.push_back(0);
    for(int i = 0; i<ans.size(); i += 75){
        ll s = 0;
        for(int j = 0; j<75; ++j) if (ans[i + j]) s += Nigga::dp[j];

        for(int j = 0; j<53; ++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[75];
void prepare(){
	dp[0] = 1; dp[1] = 2;
    for(int i = 2; i<75; ++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 += 53){
    	ll s = 0;
    	for(int j = 52; j>=0; --j) s = s * 2 + A[i+j];
    	for(int j = 74; j>=0; --j) if (Ligma::dp[j] <= s){
    		s -= Ligma::dp[j];
    		pos.push_back(shit + j);
    	}
    	shit += 75;
    }
    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 += 75){
      |                    ~^~~~~~~~~~~
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;
      |                            ^~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 776 KB Output is correct
2 Correct 0 ms 944 KB Output is correct
3 Correct 0 ms 792 KB Output is correct
4 Correct 0 ms 780 KB Output is correct
5 Correct 0 ms 792 KB Output is correct
6 Correct 0 ms 776 KB Output is correct
7 Correct 0 ms 780 KB Output is correct
8 Correct 1 ms 788 KB Output is correct
9 Correct 1 ms 928 KB Output is correct
10 Correct 0 ms 776 KB Output is correct
11 Correct 0 ms 1028 KB Output is correct
# Verdict Execution time Memory Grader output
1 Partially correct 40 ms 8132 KB Partially correct
2 Partially correct 41 ms 8236 KB Partially correct
3 Partially correct 42 ms 8176 KB Partially correct
4 Partially correct 39 ms 8432 KB Partially correct
5 Partially correct 38 ms 8140 KB Partially correct
6 Partially correct 39 ms 8224 KB Partially correct
7 Partially correct 42 ms 8140 KB Partially correct
8 Partially correct 40 ms 8144 KB Partially correct
9 Partially correct 39 ms 8480 KB Partially correct
10 Partially correct 40 ms 8220 KB Partially correct
11 Partially correct 40 ms 8152 KB Partially correct
12 Partially correct 39 ms 8220 KB Partially correct
13 Partially correct 50 ms 8216 KB Partially correct
14 Partially correct 48 ms 8384 KB Partially correct
15 Partially correct 41 ms 8096 KB Partially correct
16 Partially correct 44 ms 8088 KB Partially correct
17 Partially correct 44 ms 8224 KB Partially correct
18 Partially correct 47 ms 8220 KB Partially correct
19 Partially correct 42 ms 8172 KB Partially correct
20 Partially correct 39 ms 8304 KB Partially correct
21 Partially correct 38 ms 8160 KB Partially correct
22 Partially correct 44 ms 8056 KB Partially correct
23 Partially correct 39 ms 8140 KB Partially correct
24 Partially correct 39 ms 8204 KB Partially correct
25 Partially correct 43 ms 8240 KB Partially correct
26 Partially correct 43 ms 8240 KB Partially correct
27 Partially correct 46 ms 8232 KB Partially correct
28 Partially correct 44 ms 8224 KB Partially correct
29 Partially correct 42 ms 8328 KB Partially correct
30 Partially correct 44 ms 8276 KB Partially correct
31 Partially correct 43 ms 8192 KB Partially correct
32 Partially correct 46 ms 8160 KB Partially correct
33 Partially correct 40 ms 8244 KB Partially correct