Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Silver Marriage, tunyash@gmail.com
- */
- #include <iostream>
- #include <fstream>
- #include <stack>
- #include <cstdlib>
- #include <cmath>
- #include <string>
- #include <set>
- #include <map>
- #include <vector>
- #include <algorithm>
- #include <ctime>
- #include <cassert>
- #include <stdio.h>
- #include <queue>
- using namespace std;
- #define mp make_pair
- #define pb push_back
- #define gcd(a,b) __gcd(a,b)
- #define forn(i,n) for(int i = 0; i < n; i++)
- #define ford(i,n) for(int i = n - 1; i >= 0; i--)
- #define forab(i,l,r) for(int i = l; i <= r; i++)
- #define forabd(i,r,l) for(int i = r; i >= l; i--)
- #define sqr(x) ((x) * (x))
- #define X first
- #define Y second
- #define FILENAME ""
- const long long base = 1000000000 + 7;
- const long double eps = 1e-9;
- typedef long long ll;
- typedef pair<int, int> pii;
- typedef vector<int> vi;
- int x[1005], y[1005], r[1005];
- int dir[1005];
- int n;
- void dfs(int v)
- {
- for (int i = 0; i < n; i++)
- {
- int dist = (x[i]-x[v]) * (x[i]-x[v]) + (y[i]-y[v])*(y[i]-y[v]);
- if (dist == (r[i] + r[v])* (r[i]+r[v]))
- {
- assert(dir[i] == -1 || dir[i] == 1 - dir[v]);
- if (dir[i] == -1)
- {
- dir[i] = 1 - dir[v];
- dfs(i);
- }
- }
- }
- }
- void solve(){
- cin >> n;
- for (int i = 0; i < n; i++)
- {
- cin >> x[i] >> y[i] >> r[i];
- }
- for (int i = 0; i < n; i++) dir[i] = -1;
- dir[0] = 0;
- dfs(0);
- for (int i = 0; i < n; i++)
- {
- int num = r[0];
- int den = r[i];
- if (dir[i] == -1)
- {
- cout << "not moving" << endl;
- continue;
- }
- int g = __gcd(num, den);
- cout << num/g;
- if (den/g != 1) cout << "/" << den/g;
- cout << " ";
- if (dir[i] == 0) cout << "clockwise";
- else if (dir[i] == 1) cout << "counterclockwise";
- cout << endl;
- }
- }
- int main(){
- ios_base :: sync_with_stdio(false);
- int test;
- cin >> test;
- while (test-->0){
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement