バイトの競プロメモ

主に競技プログラミング

B - Mysterious Light AtCoder Grand Contest 001

B - Mysterious Light

 

問題概略

f:id:baitop:20180802213303p:plain

制約

  • 2N1012
  • 1XN1
  • N と X はいずれも整数である。

 

解法

この問題が難しいのは、残された形が三角形、台形、平行四辺形と変化していくから。

一回の操作を平行四辺形を小さい平行四辺形に変えるものだと考えれば、ユークリッドの互除法的な操作をすることで解ける。

 

AtCoder Grand Contest 001 B - Mysterious Light - mayoko’s diary

↑参考

public static void main(String[] args)
{
//longを忘れるなオーバーフローするぞ
N = sc.nextLong();
long x = sc.nextLong();
long res = N;
long a = N - x;
long b = x;
if (a < b)
{
long c = a;
a = b;
b = c;
}
while (b > 0)
{
res += (2 * (a / b)) * b;
long c = a % b;
a = b;
b = c;
}
System.out.println(res);
}