QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#561589 | #9237. Message | bulijiojiodibuliduo# | 90.25 | 1187ms | 4248kb | C++17 | 6.3kb | 2024-09-13 00:34:52 | 2024-09-13 00:34:52 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef basic_string<int> BI;
typedef long long ll;
typedef pair<int,int> PII;
typedef double db;
//const ll mod=1000000007;
//int rnd(int x) { return mrand() % x;}
//ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
// head
#ifdef ONLINE_JUDGE
#include "message.h"
#else
void send_message(std::vector<bool> M, std::vector<bool> C);
std::vector<bool> send_packet(std::vector<bool> A);
std::vector<bool> receive_message(std::vector<std::vector<bool>> R);
#endif
int ext=4;
int B=64;
int blen=B*16+1;
int pad[10100],xbit[10100];
typedef unsigned long long u64;
int bit=50;
u64 mod=(1ull<<bit);
u64 b[33][4][2];
const int BT=60;
struct guass {
int rk;
ll cyc[BT+10];
void init() {
rep(i,0,BT+1) cyc[i]=0;
rk=0;
}
void add(ll w) {
per(i,0,BT+1) {
if (w&(1ll<<i)) {
if (cyc[i]==0) {
cyc[i]=w,rk++;
break;
}
}
w=min(w,w^cyc[i]);
}
}
ll query(ll w) {
per(i,0,BT+1) {
w=min(w,w^cyc[i]);
}
return w;
}
};
u64 base[111],sol[111];
vector<u64> solve(vector<pair<u64,u64>> bt,u64 ss=0) {
u64 x=ss;
rep(i,0,SZ(bt)) x^=bt[i].fi;
rep(i,0,bit) base[i]=0,sol[i]=0;
vector<u64> zz;
rep(j,0,SZ(bt)) {
u64 sx=(1ull<<j);
u64 val=bt[j].fi^bt[j].se;
bool fd=0;
per(i,0,bit) {
if (val&(1ull<<i)) {
if (base[i]==0) {
base[i]=val; sol[i]=sx;
fd=1;
break;
} else {
val^=base[i]; sx^=sol[i];
}
}
}
if (!fd) zz.pb(sx);
}
u64 val=x,sx=0;
per(i,0,bit) {
if (val&(1ull<<i)) {
if (base[i]==0) {
return {};
} else {
val^=base[i]; sx^=sol[i];
}
}
}
vector<u64> pz;
int m=SZ(zz);
rep(S,0,1<<m) {
u64 o=sx;
rep(j,0,m) if (S&(1<<j)) o^=zz[j];
pz.pb(o);
}
return pz;
}
void send_message(std::vector<bool> M, std::vector<bool> C) {
mt19937 rng(12345);
mt19937_64 rng2(1234567);
rep(i,0,blen) pad[i]=rng()%2;
rep(i,0,3000) xbit[i]=rng()%2;
rep(i,0,31) rep(j,0,ext) rep(k,0,2) b[i][j][k]=rng2()%mod;
int m=blen-SZ(M)-1;
M.pb(pad[m]^1);
per(i,0,m) M.pb(pad[i]);
VI gd;
rep(i,0,31) if (C[i]==0) gd.pb(i);
int cc=0;
rep(i,0,B) {
vector<bool> bs(31,false);
rep(j,0,16) bs[gd[j]]=M[i*16+j];
rep(j,0,31) bs[j]=bs[j]^xbit[cc++];
send_packet(bs);
}
vector<pair<u64,u64>> o;
rep(i,0,ext) rep(j,0,16) {
int pos=gd[j];
if (i!=0||j!=0) o.pb(mp(b[pos][i][0],b[pos][i][1]));
}
auto zz=solve(o);
assert(!zz.empty());
auto z=zz[0];
ll v=0;
rep(i,0,SZ(o)) if ((z>>i)&1) v^=o[i].se; else v^=o[i].fi;
assert(v==0);
v=0;
rep(i,0,ext) {
vector<bool> bs(31,false);
rep(j,0,16) {
if (i==0&&j==0) bs[gd[0]]=M[blen-1];
else {
bs[gd[j]]=(z>>(i*16+j-1))&1;
v^=b[gd[j]][i][bs[gd[j]]];
}
}
rep(j,0,31) bs[j]=bs[j]^xbit[cc++];
send_packet(bs);
}
assert(v==0);
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> RR) {
vector<VI> R(SZ(RR),VI(31,0));
rep(i,0,SZ(R)) rep(j,0,31) R[i][j]=RR[i][j];
mt19937 rng(12345);
mt19937_64 rng2(1234567);
rep(i,0,blen) pad[i]=rng()%2;
rep(i,0,3000) xbit[i]=rng()%2;
rep(i,0,31) rep(j,0,ext) rep(k,0,2) b[i][j][k]=rng2()%mod;
int cc=0;
int way=0;
VI gd(16);
rep(i,0,SZ(R)) rep(j,0,31) R[i][j]=R[i][j]^xbit[cc++];
rep(i,0,31) {
vector<pair<u64,u64>> o;
rep(j,i,31) {
u64 num=0;
rep(k,0,ext) if (j!=i||k!=0) num^=b[j][k][R[B+k][j]];
o.pb(mp(0,num));
}
auto z=solve(o);
for (auto x:z) {
x=x<<i;
if (__builtin_popcount(x)==16&&(x&(1ll<<i))) {
way+=1;
int cc=0;
rep(j,0,31) if ((x>>j)&1) {
gd[cc++]=j;
}
}
}
}
assert(way==1);
vector<bool> seq;
rep(i,0,B) {
vector<bool> bs(31,false);
rep(j,0,16) seq.pb(R[i][gd[j]]);
}
seq.pb(R[B][gd[0]]);
//rep(i,0,SZ(seq)) printf("%d",(int)seq[i]); puts("seq");
int c=0;
while (seq.back()==pad[c]) seq.pop_back(),c++;
seq.pop_back();
return seq;
}
#ifdef ONLINE_JUDGE
#else
//#include "message.h"
#include <cassert>
#include <cstdio>
#include <cstdlib>
namespace {
const int PACKET_SIZE = 31;
const int CALLS_CNT_LIMIT = 100;
int calls_cnt;
std::vector<bool> C(PACKET_SIZE);
std::vector<std::vector<bool>> R;
void quit(const char* message) {
printf("%s\n", message);
exit(0);
}
void run_scenario() {
R.clear();
calls_cnt = 0;
int S;
assert(1 == scanf("%d", &S));
std::vector<bool> M(S);
for (int i = 0; i < S; i++) {
int bit;
assert(1 == scanf("%d", &bit));
assert((bit == 0) || (bit == 1));
M[i] = bit;
}
for (int i = 0; i < PACKET_SIZE; i++) {
int bit;
assert(1 == scanf("%d", &bit));
assert((bit == 0) || (bit == 1));
C[i] = bit;
}
send_message(M, C);
std::vector<bool> D = receive_message(R);
int K = (int)R.size();
int L = (int)D.size();
printf("%d %d\n", K, L);
for (int i = 0; i < L; i++)
printf("%s%d", (i == 0 ? "" : " "), (D[i] ? 1 : 0));
printf("\n");
assert(L==S);
rep(i,0,L) assert(D[i]==M[i]);
}
std::vector<bool> taint(const std::vector<bool>& A) {
std::vector<bool> B = A;
bool bit = 0;
for (int i = 0; i < PACKET_SIZE; i++)
if (C[i] == 1) {
B[i] = bit;
bit = !bit;
}
return B;
}
} // namespace
std::vector<bool> send_packet(std::vector<bool> A) {
calls_cnt++;
if (calls_cnt > CALLS_CNT_LIMIT)
quit("Too many calls");
if ((int)A.size() != PACKET_SIZE)
quit("Invalid argument");
std::vector<bool> B = taint(A);
R.push_back(B);
return B;
}
int main() {
int T;
assert(1 == scanf("%d", &T));
for (int i = 1; i <= T; i++) {
printf("Case #%d:\n",i);
run_scenario();
}
}
#endif
詳細信息
Subtask #1:
score: 9.025
Acceptable Answer
Test #1:
score: 9.025
Acceptable Answer
time: 1180ms
memory: 3908kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #2:
score: 9.025
Acceptable Answer
time: 1161ms
memory: 3888kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #3:
score: 9.025
Acceptable Answer
time: 1155ms
memory: 4044kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #4:
score: 9.025
Acceptable Answer
time: 1110ms
memory: 3888kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #5:
score: 9.025
Acceptable Answer
time: 849ms
memory: 4152kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #6:
score: 9.025
Acceptable Answer
time: 648ms
memory: 3884kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #7:
score: 9.025
Acceptable Answer
time: 706ms
memory: 3904kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Subtask #2:
score: 81.225
Acceptable Answer
Test #8:
score: 81.225
Acceptable Answer
time: 1186ms
memory: 4076kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #9:
score: 81.225
Acceptable Answer
time: 1176ms
memory: 3908kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #10:
score: 81.225
Acceptable Answer
time: 1094ms
memory: 4076kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #11:
score: 81.225
Acceptable Answer
time: 1118ms
memory: 3844kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #12:
score: 81.225
Acceptable Answer
time: 1174ms
memory: 3972kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #13:
score: 81.225
Acceptable Answer
time: 820ms
memory: 3852kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #14:
score: 81.225
Acceptable Answer
time: 654ms
memory: 4248kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #15:
score: 81.225
Acceptable Answer
time: 766ms
memory: 3944kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #16:
score: 81.225
Acceptable Answer
time: 810ms
memory: 3904kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #17:
score: 81.225
Acceptable Answer
time: 1187ms
memory: 4152kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #18:
score: 81.225
Acceptable Answer
time: 1151ms
memory: 3968kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #19:
score: 81.225
Acceptable Answer
time: 1185ms
memory: 4244kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #20:
score: 81.225
Acceptable Answer
time: 1100ms
memory: 4076kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #21:
score: 81.225
Acceptable Answer
time: 1142ms
memory: 4120kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #22:
score: 81.225
Acceptable Answer
time: 1044ms
memory: 4172kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #23:
score: 81.225
Acceptable Answer
time: 1070ms
memory: 3944kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #24:
score: 81.225
Acceptable Answer
time: 1177ms
memory: 3972kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #25:
score: 81.225
Acceptable Answer
time: 1108ms
memory: 3848kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #26:
score: 81.225
Acceptable Answer
time: 1184ms
memory: 4008kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #27:
score: 81.225
Acceptable Answer
time: 1138ms
memory: 3980kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025