#include //#include using namespace std; const int MAXP = 10000; class planetoid { public: long long mass; long long xyz[3]; long long v[3]; long long sxyz[3]; // location of at time of last intersection } pl[MAXP]; long dim[3]; bool foundMatch(int n, int& numMatch, int& low) { bool match = false; numMatch = 1; for(int i=0; i b.xyz[0]) return true; if(a.xyz[0] == b.xyz[0]){ if(a.xyz[1] > b.xyz[1]) return true; if(a.xyz[1]==b.xyz[1]){ if(a.xyz[2] > b.xyz[2]) return true; } } } return false; } void Swap_Long(long long & a, long long& b){ long long temp = a; a = b; b = temp; } void Swap(planetoid& a, planetoid& b){ Swap_Long(a.mass, b.mass); for(int i = 0; i < 3; i++){ Swap_Long(a.xyz[i], b.xyz[i]); Swap_Long(a.v[i], b.v[i]); Swap_Long(a.sxyz[i], b.sxyz[i]); } } int main() { int n; cin >> n >> dim[0] >> dim[1] >> dim[2]; for(int i=0; i> pl[i].mass; cin >> pl[i].xyz[0] >> pl[i].xyz[1] >> pl[i].xyz[2]; cin >> pl[i].v[0] >> pl[i].v[1] >> pl[i].v[2]; pl[i].sxyz[0] = pl[i].xyz[0]; pl[i].sxyz[1] = pl[i].xyz[1]; pl[i].sxyz[2] = pl[i].xyz[2]; } bool repeatedState = false;; int t = 0; while (true) { t++; //if (t == 990) cout << "Time " << t << ", number of planetoids = " << n << endl; repeatedState = true; for(int i=0; i 10000/**/) break; bool match = false; int num, lowest; while (foundMatch(n, num, lowest)) { match = true; for(int i=n-1; i>lowest; i--) { if (pl[i].xyz[0] == pl[lowest].xyz[0] && pl[i].xyz[1] == pl[lowest].xyz[1] && pl[i].xyz[2] == pl[lowest].xyz[2]) { pl[lowest].mass += pl[i].mass; pl[lowest].v[0] += pl[i].v[0]; pl[lowest].v[1] += pl[i].v[1]; pl[lowest].v[2] += pl[i].v[2]; pl[i] = pl[--n]; /* cout << "Planetoids " << i << " and " << lowest << " meet at time " << t << " at location ("; cout << pl[i].ixyz[0] << ','; cout << pl[i].ixyz[1] << ','; cout << pl[i].ixyz[2] << ')' << endl; /**/ } } pl[lowest].v[0] /= num; pl[lowest].v[1] /= num; pl[lowest].v[2] /= num; } if (match) { for(int i=0; i