| 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... |
