AOJ2639 Yamanote Line

Yamanote Line | Aizu Online Judge

Introduction to Programming Introduction to Algorithms and Data Structures Library of Data Structures Library of Graph Algorithms Library of Computational Geometry Library of Dynamic Programming Library of Number Theory

起きる,寝るを実際に繰り返す.

とする.既に訪れた場所に訪れるとそこでループするので,ループせずに目的の場所に辿り着ける場合は今までの合計の時間,そうではない場合は-1を出力した.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <sstream>
#include <map>
#include <set>

#define REP(i,k,n) for(int i=k;i<n;i++)
#define rep(i,n) for(int i=0;i<n;i++)
#define INF 1<<30
#define pb push_back
#define mp make_pair

using namespace std;
typedef long long ll;
typedef pair<int,int> P;

int main() {
  int a, b, c;
  cin >> a >> b >> c;

  bool used[60][2];
  memset(used, 0, sizeof(used));

  int cnt = 0, ans = 0;
  bool flag = true;
  while(true) {
      if(cnt & 1) {
          ans += b;
          if(used[ans%60][1]) {
              flag = false;
              break;
          }
          used[ans%60][1] = true;
      } else {
          if(ans % 60 + a >= 60 && ans % 60 <= c) {
              ans += c - ans % 60;
              break;
          }
          else if(c >= ans % 60 && (ans + a) % 60 >= c) {
              ans += c - ans % 60;
              break;
          } else {
              ans += a;
              if(used[ans%60][0]) {
                  flag = false;
                  break;
              }
              used[ans%60][0] = true;
          }
      }
      cnt++;
  }

  if(flag) cout << ans << endl;
  else cout << -1 << endl;

  return 0;
}
Mar 22nd, 2016