結果
| 問題 | No.443 GCD of Permutation | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2016-11-12 01:03:56 | 
| 言語 | Java (openjdk 23) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 135 ms / 1,000 ms | 
| コード長 | 1,191 bytes | 
| コンパイル時間 | 3,225 ms | 
| コンパイル使用メモリ | 78,084 KB | 
| 実行使用メモリ | 41,684 KB | 
| 最終ジャッジ日時 | 2024-10-13 23:45:30 | 
| 合計ジャッジ時間 | 8,021 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 28 | 
ソースコード
import java.io.PrintStream;
import java.util.Scanner;
public class Y443 {
	Scanner in = new Scanner(System.in);
	PrintStream out = new PrintStream(System.out);
	Y443() throws Exception {
		String s = in.next();
		
		boolean[] flag = new boolean[10];
		
		if (isRepetitive(s)) {
			out.println(s);
			return;
		}
		
		for (int i = 0; i < s.length(); i++) {
			flag[s.charAt(i) - '0'] = true;
		}
		
		long g = 0;
		
		for (int i = 0; i < 10; i++) {
			for (int j = i + 1; j < 10; j++) {
				if (flag[i] && flag[j]) {
					g = gcd(g, 9 * (j - i));
				}
			}
		}
		
	
		for (int i = (int)g; i>0; i--) {
			if (g % i == 0 && divisible(s, i)) {
				out.println(i);
				return;
			}
		}
	}
	
	boolean isRepetitive(String s) {
		for (int i = 0; i < s.length(); i++) {
			if (s.charAt(0) != s.charAt(i)) {
				return false;
			}
		}
		return true;
	}
	boolean divisible(String s, int x) {
		int r = 0;
		for (int i = 0; i < s.length(); i++) {
			r = (r * 10 + s.charAt(i) - '0') % x;
		}
		return r == 0;
	}
	
	long gcd(long x, long y) {
		while (y > 0) {
			x %= y;
			long t = x; x = y; y = t;
		}
		return x;
	}
	public static void main(String argv[]) throws Exception {
		new Y443();
	}
}
            
            
            
        