srm 490 div2 mid Starport

  • int型からはみ出してしまって撃沈 -> longに修正
  • \mathrm{lcm}(N, M) = NM / \mathrm{gcd}(N, M)
  • このコードだと、N=1e9, M=1 でタイムアウトになるみたい。
    • whileループがN回(i.e. 1e9回)のループになっちゃう。
    • それ以前に、N=1000000000, M=999999999 でおかしな値が出ているな。
  • この問題は、それなりに考えてコードを書かないと死ぬ問題だったようだ。
#include <sstream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
#include <utility>
#include <set>
#include <cctype>
#include <queue>
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
class Starport{
public:
  double getExpectedTime(int N, int M){
    double ret = 0;
    long cnt = 1;
    long i = 1;
    long temp;
    while((i * M) % N > 0){
      temp = ((long)N - i * M) % N;
      ret += temp > 0 ? temp : temp + N;
      cnt ++;
      i++;
    }
    return ret / cnt;
  }


};


// Powered by FileEdit
// Powered by TZTester 1.01 [25-Feb-2003]
// Powered by CodeProcessor