QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#561589#9237. Messagebulijiojiodibuliduo#90.25 1187ms4248kbC++176.3kb2024-09-13 00:34:522024-09-13 00:34:52

Judging History

你现在查看的是最新测评结果

  • [2024-09-13 00:34:52]
  • 评测
  • 测评结果:90.25
  • 用时:1187ms
  • 内存:4248kb
  • [2024-09-13 00:34:52]
  • 提交

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