CSES - UKIEPC 2017 - Results
Submission details
Task:GentleBots
Sender:KnowYourArchitecture
Submission time:2017-10-31 21:20:51 +0200
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.03 sdetails
#2ACCEPTED0.04 sdetails
#3ACCEPTED0.04 sdetails
#4ACCEPTED0.04 sdetails
#5ACCEPTED0.03 sdetails
#6ACCEPTED0.05 sdetails
#7ACCEPTED0.04 sdetails
#8ACCEPTED0.04 sdetails
#9ACCEPTED0.03 sdetails

Code

#include <bits/stdc++.h>
using namespace std;

struct vec3{
  int a[3];
  vec3(int x=0,int y=0,int z=0){
    a[0]=x;
    a[1]=y;
    a[2]=z;
  }
  int operator[](int i) const{return a[i];}
  int& operator[](int i){return a[i];}
  vec3 operator+(const vec3& b) const{
    vec3 c;
    for(int i=0;i<3;++i)c[i]=a[i]+b[i];
    return c;
  }
  vec3 operator-(const vec3& b) const{
    vec3 c;
    for(int i=0;i<3;++i)c[i]=a[i]-b[i];
    return c;
  }
  tuple<vec3,vec3,vec3> normalize() const{
    vec3 b[3];
    for(int i=0;i<3;++i){
      b[i][i]=a[i];
      if(b[i][i]<0)b[i][i]=-1;
      if(b[i][i]>0)b[i][i]=1;
    }
    return make_tuple(b[0],b[1],b[2]);
  }
  bool operator==(const vec3& b) const{
    for(int i=0;i<3;++i)if(a[i]!=b[i])return false;
    return true;
  }
  bool zero() const{return !a[0]&&!a[1]&&!a[2];};
};

istream& operator>>(istream& in,vec3& a){for(int i=0;i<3;++i)in>>a[i];return in;}
ostream& operator<<(ostream& out,const vec3& a){out<<'('<<a[0]<<' '<<a[1]<<' '<<a[2]<<')';return out;}

bool checkmove(vec3& sa,vec3& da,vec3&sb,vec3&db){
  vec3 av = sa+da;
  vec3 bv = sb+db;
  if((av==sb && sa == bv) || av == bv)return false;
  sa=av;
  sb=bv;
  return true;
}

bool checks(vec3& sa,vec3& sb,vec3&da,vec3&dbx,vec3&dby,vec3&dbz){
  if(!dbx.zero()&&checkmove(sa,da,sb,dbx))return true;
  if(!dby.zero()&&checkmove(sa,da,sb,dby))return true;
  if(!dbz.zero()&&checkmove(sa,da,sb,dbz))return true;
  return false;
}

void single_move_skip(vec3& sa, vec3& sb, vec3& mv, vec3& md, vec3& ov){
  vec3 ms(md[1],md[2],md[0]);
  mv=mv+md;
  ov=ov+ms;
  cout<<sa<<' '<<sb<<'\n';
  mv=mv+md;
  ov=ov-ms;
}

int main() {
  vec3 sa,ea;
  vec3 sb,eb;
  cin>>sa>>ea;
  cin>>sb>>eb;
  vec3 zero;
  cout<<sa<<' '<<sb<<'\n';
  while(true) {
    vec3 dax,day,daz;
    vec3 dbx,dby,dbz;
    vec3 daf = ea-sa;
    vec3 dbf = eb-sb;
    if(daf.zero() && dbf.zero())break;
    tie(dax,day,daz) = daf.normalize();
    tie(dbx,dby,dbz) = dbf.normalize();
    if(!dax.zero()&&checks(sa,sb,dax,dbx,dby,dbz));
    else if(!day.zero()&&checks(sa,sb,day,dbx,dby,dbz));
    else if(!daz.zero()&&checks(sa,sb,daz,dbx,dby,dbz));
    else if(dbf.zero()&&checks(sb,sa,zero,dax,day,daz));
    else if(daf.zero()&&checks(sa,sb,zero,dbx,dby,dbz));
    //else if(checks(sa,sb,zero,dbx,dby,dbz));
    //else if(checks(sb,sa,zero,dax,day,daz));
    else{
      vec3 *da,*db;
      if(!dax.zero())da=&dax;
      else if(!day.zero())da=&day;
      else da=&daz;
      if(!dbx.zero())db=&dbx;
      else if(!dby.zero())db=&dby;
      else db=&dbz;
      if(da->zero())single_move_skip(sa,sb,sb,*db,sa);
      else single_move_skip(sa,sb,sa,*da,sb);
    }
    cout<<sa<<' '<<sb<<'\n';
  }
  
  return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
0 0 -1 0 0 1
0 0 1 0 0 -1

correct output
(0 0 -1) (0 0 1)
(0 0 0) (1 0 1)
(0 0 1) (1 0 0)
(0 0 1) (1 0 -1)
(0 0 1) (0 0 -1)

user output
(0 0 -1) (0 0 1)
(0 0 0) (0 1 1)
(0 0 1) (0 0 1)
(0 0 1) (0 0 0)
(0 0 1) (0 0 -1)

Test 2

Verdict: ACCEPTED

input
-124 223 38 -321 90 -17
274 -265 -332 -145 240 75

correct output
(-124 223 38) (274 -265 -332)
(-125 223 38) (273 -265 -332)
(-126 223 38) (272 -265 -332)
(-127 223 38) (271 -265 -332)
(-128 223 38) (270 -265 -332)
...

user output
(-124 223 38) (274 -265 -332)
(-125 223 38) (273 -265 -332)
(-126 223 38) (272 -265 -332)
(-127 223 38) (271 -265 -332)
(-128 223 38) (270 -265 -332)
...

Test 3

Verdict: ACCEPTED

input
32 -397 -21 378 218 173
36 -344 365 -113 -331 372

correct output
(32 -397 -21) (36 -344 365)
(33 -397 -21) (35 -344 365)
(34 -397 -21) (34 -344 365)
(35 -397 -21) (33 -344 365)
(36 -397 -21) (32 -344 365)
...

user output
(32 -397 -21) (36 -344 365)
(33 -397 -21) (35 -344 365)
(34 -397 -21) (34 -344 365)
(35 -397 -21) (33 -344 365)
(36 -397 -21) (32 -344 365)
...

Test 4

Verdict: ACCEPTED

input
-309 -252 245 -347 -277 -152
357 97 271 -145 68 -241

correct output
(-309 -252 245) (357 97 271)
(-310 -252 245) (356 97 271)
(-311 -252 245) (355 97 271)
(-312 -252 245) (354 97 271)
(-313 -252 245) (353 97 271)
...

user output
(-309 -252 245) (357 97 271)
(-310 -252 245) (356 97 271)
(-311 -252 245) (355 97 271)
(-312 -252 245) (354 97 271)
(-313 -252 245) (353 97 271)
...

Test 5

Verdict: ACCEPTED

input
193 -177 210 -212 -154 -298
-258 -125 -76 -153 -204 243

correct output
(193 -177 210) (-258 -125 -76)
(192 -177 210) (-257 -125 -76)
(191 -177 210) (-256 -125 -76)
(190 -177 210) (-255 -125 -76)
(189 -177 210) (-254 -125 -76)
...

user output
(193 -177 210) (-258 -125 -76)
(192 -177 210) (-257 -125 -76)
(191 -177 210) (-256 -125 -76)
(190 -177 210) (-255 -125 -76)
(189 -177 210) (-254 -125 -76)
...

Test 6

Verdict: ACCEPTED

input
1 0 0 0 0 50
0 0 0 1 0 50

correct output
(1 0 0) (0 0 0)
(1 0 1) (1 0 0)
(0 0 1) (1 0 1)
(0 0 2) (1 0 2)
(0 0 3) (1 0 3)
...

user output
(1 0 0) (0 0 0)
(0 0 0) (0 0 1)
(0 0 1) (1 0 1)
(0 0 2) (1 0 2)
(0 0 3) (1 0 3)
...

Test 7

Verdict: ACCEPTED

input
952 0 0 952 0 0
953 0 0 951 0 0

correct output
(952 0 0) (953 0 0)
(952 0 -1) (952 0 0)
(952 0 0) (951 0 0)

user output
(952 0 0) (953 0 0)
(952 0 -1) (952 0 0)
(952 0 0) (951 0 0)

Test 8

Verdict: ACCEPTED

input
950 0 0 952 0 0
951 0 0 951 0 0

correct output
(950 0 0) (951 0 0)
(950 0 -1) (951 0 0)
(951 0 -1) (951 0 0)
(952 0 -1) (951 0 0)
(952 0 0) (951 0 0)

user output
(950 0 0) (951 0 0)
(951 0 0) (951 0 1)
(952 0 0) (951 0 0)

Test 9

Verdict: ACCEPTED

input
-500 -500 -500 500 500 500
-500 -501 -500 500 499 500

correct output
(-500 -500 -500) (-500 -501 -5...

user output
(-500 -500 -500) (-500 -501 -5...