Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.*;
- public class Main implements Runnable {
- static class Mapper {
- Map<String, Integer> mapper = new HashMap<String, Integer>();
- public int get(String s) {
- if (mapper.containsKey(s)) {
- return mapper.get(s);
- } else {
- mapper.put(s, mapper.size());
- return mapper.size() - 1;
- }
- }
- }
- private void solution() throws IOException {
- while (in.hasNext()) {
- int n = in.nextInt();
- if (n == 0) {
- break;
- }
- Mapper mapper = new Mapper();
- for (int i = 0; i < n; ++i) {
- in.next();
- }
- double[][] path = new double[n][n];
- for (double[] a : path) {
- Arrays.fill(a, Double.NaN);
- }
- int q = in.nextInt();
- for (int i = 0; i < q; ++i) {
- int x = mapper.get(in.next());
- int y = mapper.get(in.next());
- String t = in.next();
- String[] lex = t.split(":");
- // if (Double.isNaN(path[x][y])) {
- path[x][y] = Math.log((double) Integer.parseInt(lex[1]) / Integer.parseInt(lex[0]));
- // } else {
- // path[x][y] = Math.max(path[x][y], Math.log((double) Integer.parseInt(lex[1]) / Integer.parseInt(lex[0])));
- // }
- }
- for (int k = 0; k < n; ++k) {
- for (int i = 0; i < n; ++i) {
- if (!Double.isNaN(path[i][k])) {
- for (int j = 0; j < n; ++j) {
- if (!Double.isNaN(path[k][j])) {
- if (Double.isNaN(path[i][j]) || path[i][j] < path[i][k] + path[k][j]) {
- path[i][j] = path[i][k] + path[k][j];
- }
- }
- }
- }
- }
- }
- boolean ok = true;
- for (int i = 0; i < n; ++i) {
- if (!Double.isNaN(path[i][i])) {
- if (path[i][i] - 1e-9 > 0) {
- ok = false;
- }
- }
- }
- out.println(ok ? "Ok" : "Arbitrage");
- }
- }
- public void run() {
- try {
- solution();
- in.reader.close();
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
- public static void main(String[] args) {
- new Thread(null, new Main(), "", 1 << 28).start();
- }
- private class Scanner {
- BufferedReader reader;
- StringTokenizer tokenizer;
- public Scanner(Reader reader) {
- this.reader = new BufferedReader(reader);
- this.tokenizer = new StringTokenizer("");
- }
- public boolean hasNext() throws IOException {
- while (!tokenizer.hasMoreTokens()) {
- String line = reader.readLine();
- if (line == null) {
- return false;
- }
- tokenizer = new StringTokenizer(line);
- }
- return true;
- }
- public String next() throws IOException {
- hasNext();
- return tokenizer.nextToken();
- }
- public int nextInt() throws IOException {
- return Integer.parseInt(next());
- }
- }
- Scanner in = new Scanner(new InputStreamReader(System.in));
- PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement