Submission #1140062

#TimeUsernameProblemLanguageResultExecution timeMemory
1140062SkymagicMessage (IOI24_message)C++17
100 / 100
377 ms852 KiB
/******************** * what the sigma * ********************/ #include <iostream> #include <vector> #include <map> #include <queue> #include <algorithm> #include <stack> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; #define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> using namespace std; #define lgm cin.tie(0)->sync_with_stdio(0); #define be(x) x.begin(),x.end() #define ve vector #define ll long long #define ld long double #define db(x) cout << "Debug at " << x << endl; #define ull unsigned ll #define f first #define s second #define pii pair<int, int> #define tii tuple<int,int,int> #define pll pair<ll,ll> #define sz(x) (int)x.size() #define pb push_back const ll mod = 1e9+7,maxn=200005; const ll INF=(ll)9e18; std::vector<bool> send_packet(std::vector<bool> A); void send_message(std::vector<bool> M, std::vector<bool> C) { ve<bool> first(31); ve<int> pos,dist; for (int i=0;i<31;i++) { if (!C[i]) { pos.pb(i); } } for (int i=1;i<16;i++) { dist.pb(pos[i]-pos[i-1]); } dist.pb(pos[0]-pos[15]+31); ve<ve<bool>> packets(66,ve<bool>(31)); for (int i=0;i<16;i++) { for (int j=0;j<dist[i]-1;j++) { packets[j][pos[i]]=1; } } M.pb(1); while (sz(M)<1025) { M.pb(0); } int cur=0; for (int i=0;i<16;i++) { for (int j=dist[i];j<66;j++) { packets[j][pos[i]]=M[cur]; cur++; } } for (int i=0;i<66;i++){ send_packet(packets[i]); } } std::vector<bool> receive_message(std::vector<std::vector<bool>> R) { ve<int> con(31),pos; for (int i=0;i<31;i++) { int p=0; con[i]=i+1; while (p<40) { if (R[p][i]) { con[i]++; p++; } else break; } con[i]%=31; } for (int i=0;i<31;i++) { int cur=i; bool f=0; for (int j=0;j<16;j++) { cur=con[cur]; if (cur==i) { f=(j==15); break; } } if (f) { cur=i; for (int j=0;j<16;j++) { pos.pb(cur); cur=con[cur]; } break; } } ve<bool> out; for (int i=0;i<16;i++) { for (int j=(con[pos[i]]-pos[i]+31)%31;j<66;j++) { out.pb(R[j][pos[i]]); } } while (!out.back()) { out.pop_back(); } out.pop_back(); return out; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...