Task: | GentleBots |
Sender: | KnowYourArchitecture |
Submission time: | 2017-10-31 21:20:51 +0200 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.03 s | details |
#2 | ACCEPTED | 0.04 s | details |
#3 | ACCEPTED | 0.04 s | details |
#4 | ACCEPTED | 0.04 s | details |
#5 | ACCEPTED | 0.03 s | details |
#6 | ACCEPTED | 0.05 s | details |
#7 | ACCEPTED | 0.04 s | details |
#8 | ACCEPTED | 0.04 s | details |
#9 | ACCEPTED | 0.03 s | details |
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... |