Untitled
unknown
plain_text
2 years ago
1.6 kB
6
Indexable
The Frog Input: 2 //testcase 2 // so la 1 10 10 // toa do x,y cua la; ban kinh la 100 100 15 4 0 10 10 20 60 12 30 10 10 70 10 8 Output: -1 0 2 Code: #include<iostream> #define max 1000000 using namespace std; int n; int map[205][3]; int visit[205]; int front= -1; int rear=-1; int queue[1000000]; void push(int x){ if(rear == max-1) rear =-1; rear++; queue[rear]=x; } void pop(){ if(front == max-1) front =-1; front++; } bool IsEmpty(){ return front == rear; } void reset(){ for(int i=1; i <= n; i++){ visit[i]=1000000; } front =rear =-1; } int binh(int x){ int result; result = x*x; return result; } int calculate(int x, int i){ if((binh(map[i][0]-map[x][0]) + binh(map[i][1]-map[x][1])) <= binh(40 +map[i][2] +map[x][2] )) return 1; else if((binh(map[i][0]-map[x][0]) + binh(map[i][1]-map[x][1])) > binh(40 +map[x][2] + map[i][2]) && (binh(map[i][0]-map[x][0]) + binh(map[i][1]-map[x][1])) <= binh(90 +map[x][2] + map[i][2])) return 200; return 1000000; } void Try(int j){ push(j); visit[j]=0; while(!IsEmpty()){ pop(); int x=queue[front]; for(int i=0; i<n; i++){ if(i!=x){ int t = calculate(x,i); if(visit[i] > visit[x] + t){ visit[i] = visit[x] + t; push(i); } } } } } int main(){ freopen("Text.txt", "r", stdin); int test; cin >> test; for(int tc= 1; tc <= test; tc++){ cin >> n; // so la for(int i=0; i < n; i++){ for(int j= 0; j < 3; j++){ cin >> map[i][j]; } } reset(); Try(0); if(visit[n-1] == 1000000) cout << -1<< endl; else cout << visit[n-1]/200 <<" " << visit[n-1]%200 << endl; } return 0; }
Editor is loading...