Code:
#include<stdio.h>
#include<string.h>
#include<fstream>
#include <vector>
#include <sstream>
#include <iostream>
#include <cstdio>
using namespace std ;
#define fo "output.txt"
class ThreeTeleports {
public:
struct point{
long x;
long y;
};
struct line{
point a;
point b;
};
struct line List[4];
void Building(string a,int i){
istringstream is(a);
long tmp;
is>>tmp; List[i].a.x=tmp; //cout<<tmp<<endl;
is>>tmp; List[i].a.y=tmp; //cout<<tmp<<endl;
is>>tmp; List[i].b.x=tmp; //cout<<tmp<<endl;
is>>tmp; List[i].b.y=tmp; //cout<<tmp<<endl;
}
long long get(long x1,long y1,long x2,long y2){
return(abs(x1-x2)+abs(y1-y2));
}
int shortestDistance(int xMe, int yMe, int xHome, int yHome, vector <string> teleports) {
int i;
ifstream g; //MY QUESTION HERE: IF DON'T HAVE THIS LINE, NO PROBLEM.
for(i=0;i<=2;i++){
Building(teleports[i],i+1);
}
long long min=1000000000;
long long distance;
int mask,div;
long remainX,remainY;
for(mask=0;mask<=7*7*7;mask++){
// f<<"trang thai "<<mask<<endl;
distance=0;
remainX=xMe; remainY=yMe;
div=mask;
for(i=1;i<=3;i++){
int res;
res=div%7;
div=div/7;
if(res!=0){
if(res<=3){
//f<<res<<endl;
distance=distance+get(remainX,remainY,List[res].a.x,List[res].a.y)+10;
remainX=List[res].b.x; remainY=List[res].b.y;
}
else{
//f<<res<<endl;
res=res-3;
distance=distance+get(remainX,remainY,List[res].b.x,List[res].b.y)+10;
remainX=List[res].a.x; remainY=List[res].a.y;
}
}
}
distance=distance+get(remainX,remainY,xHome,yHome);
//f<<"khoang cach "<<distance<<endl;
if(distance<min) min=distance;
}
return(min);
printf("************************************\n");
}
// BEGIN CUT HERE
public:
void run_test(int Case) { if ((Case == -1) || (Case == 0)) test_case_0(); if ((Case == -1) || (Case == 1)) test_case_1(); if ((Case == -1) || (Case == 2)) test_case_2(); if ((Case == -1) || (Case == 3)) test_case_3(); if ((Case == -1) || (Case == 4)) test_case_4(); if ((Case == -1) || (Case == 5)) test_case_5(); }
private:
template <typename T> string print_array(const vector<T> &V) { ostringstream os; os << "{ "; for (typename vector<T>::const_iterator iter = V.begin(); iter != V.end(); ++iter) os << '\"' << *iter << "\","; os << " }"; return os.str(); }
void verify_case(int Case, const int &Expected, const int &Received) { cerr << "Test Case #" << Case << "..."; if (Expected == Received) cerr << "PASSED" << endl; else { cerr << "FAILED" << endl; cerr << "\tExpected: \"" << Expected << '\"' << endl; cerr << "\tReceived: \"" << Received << '\"' << endl; } }
void test_case_0() { int Arg0 = 3; int Arg1 = 3; int Arg2 = 4; int Arg3 = 5; string Arr4[] = {"1000 1001 1000 1002", "1000 1003 1000 1004", "1000 1005 1000 1006"}; vector <string> Arg4(Arr4, Arr4 + (sizeof(Arr4) / sizeof(Arr4[0]))); int Arg5 = 3; verify_case(0, Arg5, shortestDistance(Arg0, Arg1, Arg2, Arg3, Arg4)); }
void test_case_1() { int Arg0 = 0; int Arg1 = 0; int Arg2 = 20; int Arg3 = 20; string Arr4[] = {"1 1 18 20", "1000 1003 1000 1004", "1000 1005 1000 1006"}; vector <string> Arg4(Arr4, Arr4 + (sizeof(Arr4) / sizeof(Arr4[0]))); int Arg5 = 14; verify_case(1, Arg5, shortestDistance(Arg0, Arg1, Arg2, Arg3, Arg4)); }
void test_case_2() { int Arg0 = 0; int Arg1 = 0; int Arg2 = 20; int Arg3 = 20; string Arr4[] = {"1000 1003 1000 1004", "18 20 1 1", "1000 1005 1000 1006"}; vector <string> Arg4(Arr4, Arr4 + (sizeof(Arr4) / sizeof(Arr4[0]))); int Arg5 = 14; verify_case(2, Arg5, shortestDistance(Arg0, Arg1, Arg2, Arg3, Arg4)); }
void test_case_3() { int Arg0 = 10; int Arg1 = 10; int Arg2 = 10000; int Arg3 = 20000; string Arr4[] = {"1000 1003 1000 1004", "3 3 10004 20002", "1000 1005 1000 1006"}; vector <string> Arg4(Arr4, Arr4 + (sizeof(Arr4) / sizeof(Arr4[0]))); int Arg5 = 30; verify_case(3, Arg5, shortestDistance(Arg0, Arg1, Arg2, Arg3, Arg4)); }
void test_case_4() { int Arg0 = 3; int Arg1 = 7; int Arg2 = 10000; int Arg3 = 30000; string Arr4[] = {"3 10 5200 4900", "12212 8699 9999 30011", "12200 8701 5203 4845"}; vector <string> Arg4(Arr4, Arr4 + (sizeof(Arr4) / sizeof(Arr4[0]))); int Arg5 = 117; verify_case(4, Arg5, shortestDistance(Arg0, Arg1, Arg2, Arg3, Arg4)); }
void test_case_5() { int Arg0 = 0; int Arg1 = 0; int Arg2 = 1000000000; int Arg3 = 1000000000; string Arr4[] = {"0 1 0 999999999", "1 1000000000 999999999 0", "1000000000 1 1000000000 999999999"}; vector <string> Arg4(Arr4, Arr4 + (sizeof(Arr4) / sizeof(Arr4[0]))); int Arg5 = 36; verify_case(5, Arg5, shortestDistance(Arg0, Arg1, Arg2, Arg3, Arg4)); }
// END CUT HERE
};
// BEGIN CUT HERE
int main()
{
ThreeTeleports ___test;
___test.run_test(-1);
int X ;
scanf("%d",&X) ;
}
// END CUT HERE
You can see line I note. You just run the program, and see why.