Submission #249717

#TimeUsernameProblemLanguageResultExecution timeMemory
249717stoyan_malininMechanical Doll (IOI18_doll)C++14
Compilation error
0 ms0 KiB
#include "doll.h" #include "grader.cpp" #include <iostream> using namespace std; const int MAXN = 5e5 + 5; int usedSwitches = 0; struct Switch { static int switchCnt; int num; int state; int out[2]; Switch() { this->num = switchCnt; switchCnt++; this->state = 0; this->out[0] = this->out[1] = MAXN; } }; int Switch::switchCnt = 0; Switch s[MAXN]; struct RouterOutput { int switchNum, outNum; RouterOutput(){} RouterOutput(int switchNum, int outNum) { this->outNum = outNum; this->switchNum = switchNum; } void assignDirection(int nxt) { s[switchNum].out[outNum] = nxt; } }; struct Router { int root, sz; vector <RouterOutput> outs; Router(){} Router(int sz) { usedSwitches++; this->root = usedSwitches; this->sz = sz; build(root, 0, sz-1); initOuts(); } void build(int sInd, int l, int r) { //cout << sInd << " || " << l << " " << r << '\n'; if(l+1==r) return; if(l+2==r) { usedSwitches++; s[sInd].out[0] = -usedSwitches; return; } usedSwitches++; s[sInd].out[0] = -usedSwitches; usedSwitches++; s[sInd].out[1] = -usedSwitches; build(-s[sInd].out[0], l, (l+r)/2); build(-s[sInd].out[1], (l+r)/2+1, r); } void initOuts() { for(int i = 0;i<sz;i++) { int sInd = root; while(true) { if(s[sInd].out[ s[sInd].state ]==MAXN) { outs.push_back(RouterOutput(sInd, s[sInd].state)); s[sInd].state ^= 1; break; } s[sInd].state ^= 1; sInd = -s[sInd].out[ s[sInd].state^1 ]; } } //if(outs.size()!=sz) answer({}, {}, {}); //for(RouterOutput x: outs) cout << x.switchNum << " " << x.outNum << '\n'; } }; Router r[MAXN]; vector <int> nxt[MAXN]; void create_circuit(int M, vector <int> A) { vector <int> C(M+1); A.push_back(0); for(int i = 0;i<A.size()-1;i++) nxt[ A[i] ].push_back(A[i+1]); C[0] = A[0]; for(int i = 1;i<=M;i++) { if(nxt[i].size()>1) { int sz = 1; while(sz<nxt[i].size()) sz *= 2; r[i] = Router(sz); C[i] = -r[i].root; } else { if(nxt[i].size()==1) C[i] = nxt[i][0]; else C[i] = 0; } } for(int x = 1;x<=M;x++) { if(nxt[x].size()<=1) continue; int useLess = r[x].sz - nxt[x].size(); for(int i = 0;i<useLess;i++) r[x].outs[i].assignDirection(-r[x].root); for(int i = 0;i<nxt[x].size();i++) { r[x].outs[useLess+i].assignDirection(nxt[x][i]); } } //cout << '\n'; //for(int i = 0;i<=M;i++) cout << C[i] << '\n'; vector <int> X(usedSwitches), Y(usedSwitches); for(int i = 1;i<=usedSwitches;i++) { X[i-1] = s[i].out[0]; Y[i-1] = s[i].out[1]; //cout << X[i-1] << " " << Y[i-1] << '\n'; } if(usedSwitches>=2*(A.size()-1)) cout << 1/0 << '\n'; answer(C, X, Y); } /* 4 4 1 2 1 3 4 7 1 3 4 2 1 2 2 5 11 1 2 5 2 3 4 1 2 5 5 4 5 4 1 1 1 1 */

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:124:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  124 |     for(int i = 0;i<A.size()-1;i++) nxt[ A[i] ].push_back(A[i+1]);
      |                   ~^~~~~~~~~~~
doll.cpp:132:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  132 |             while(sz<nxt[i].size()) sz *= 2;
      |                   ~~^~~~~~~~~~~~~~
doll.cpp:151:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  151 |         for(int i = 0;i<nxt[x].size();i++)
      |                       ~^~~~~~~~~~~~~~
doll.cpp:170:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  170 |     if(usedSwitches>=2*(A.size()-1)) cout << 1/0 << '\n';
      |        ~~~~~~~~~~~~^~~~~~~~~~~~~~~~
doll.cpp:170:47: warning: division by zero [-Wdiv-by-zero]
  170 |     if(usedSwitches>=2*(A.size()-1)) cout << 1/0 << '\n';
      |                                              ~^~
/usr/bin/ld: /tmp/cceh9kYr.o: in function `answer(std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)':
grader.cpp:(.text+0x1f0): multiple definition of `answer(std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'; /tmp/ccoxTbLq.o:doll.cpp:(.text+0xa10): first defined here
/usr/bin/ld: /tmp/cceh9kYr.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccoxTbLq.o:doll.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status