結果

問題 No.816 Beautiful tuples
ユーザー claw88
提出日時 2019-04-19 21:27:00
言語 C#
(csc 2.8.2.62916)
結果
AC  
実行時間 32 ms
コード長 3,871 Byte
コンパイル時間 640 ms
使用メモリ 9,812 KB
最終ジャッジ日時 2019-07-06 02:35:31

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
01.txt AC 30 ms
9,796 KB
02.txt AC 29 ms
9,804 KB
03.txt AC 31 ms
9,804 KB
04.txt AC 30 ms
9,808 KB
05.txt AC 31 ms
9,800 KB
06.txt AC 32 ms
9,804 KB
07.txt AC 30 ms
9,812 KB
08.txt AC 30 ms
9,804 KB
09.txt AC 30 ms
9,804 KB
10.txt AC 30 ms
9,800 KB
11.txt AC 31 ms
9,812 KB
12.txt AC 30 ms
9,808 KB
13.txt AC 31 ms
9,804 KB
14.txt AC 29 ms
9,808 KB
15.txt AC 30 ms
9,804 KB
テストケース一括ダウンロード
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 2.8.2.62916 (2ad4aabc)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using SB = System.Text.StringBuilder;
//using System.Threading.Tasks;
//using System.Text.RegularExpressions;
//using System.Globalization;
//using System.Diagnostics;
using static System.Console;
using System.Numerics;
using static System.Math;
using pair = Pair<int, int>;

class Program
{
    static void Main()
    {
        //SetOut(new StreamWriter(OpenStandardOutput()) { AutoFlush = false });
        new Program().solve();
        Out.Flush();
    }
    readonly Scanner cin = new Scanner();
    readonly int[] dd = { 0, 1, 0, -1, 0 }; //→↓←↑
    readonly int mod = 1000000007;
    readonly int dom = 998244353;
    bool chmax<T>(ref T a, T b) where T : IComparable<T> { if (a.CompareTo(b) < 0) { a = b; return true; } return false; }
    bool chmin<T>(ref T a, T b) where T : IComparable<T> { if (b.CompareTo(a) < 0) { a = b; return true; } return false; }

    bool check(long A, long B, long C)
    {
        return (A + B) % C == 0 && (A + C) % B == 0 && (C + B) % A == 0 && A != B && B != C && C != A; 
    }
    void solve()
    {
        var A = cin.nextlong;
        var B = cin.nextlong;
        var K = A + B;
        var L = new SortedSet<long>();
        for (long i = 1; i * i <= K; i++)
        {
            if (K % i == 0)
            {
                L.Add(i);
                L.Add(K / i);
            
            }
        }
        foreach (var i in L)
        {
            if (check(A, B, i))
            {
                WriteLine(i);
                return;
            }
        }
        WriteLine(-1);
    }

}


static class Ex
{
    public static void join<T>(this IEnumerable<T> values, string sep = " ") => WriteLine(string.Join(sep, values));
    public static string concat<T>(this IEnumerable<T> values) => string.Concat(values);
    public static string reverse(this string s) { var t = s.ToCharArray(); Array.Reverse(t); return t.concat(); }

    public static int lower_bound<T>(this IList<T> arr, T val) where T : IComparable<T>
    {
        int low = 0, high = arr.Count;
        int mid;
        while (low < high)
        {
            mid = ((high - low) >> 1) + low;
            if (arr[mid].CompareTo(val) < 0) low = mid + 1;
            else high = mid;
        }
        return low;
    }
    public static int upper_bound<T>(this IList<T> arr, T val) where T : IComparable<T>
    {
        int low = 0, high = arr.Count;
        int mid;
        while (low < high)
        {
            mid = ((high - low) >> 1) + low;
            if (arr[mid].CompareTo(val) <= 0) low = mid + 1;
            else high = mid;
        }
        return low;
    }
}

class Pair<T, U> : IComparable<Pair<T, U>> where T : IComparable<T> where U : IComparable<U>
{
    public T f; public U s;
    public Pair(T f, U s) { this.f = f; this.s = s; }
    public int CompareTo(Pair<T, U> a) => f.CompareTo(a.f) != 0 ? f.CompareTo(a.f) : s.CompareTo(a.s);
    public override string ToString() => $"{f} {s}";
}

class Scanner
{
    string[] s; int i;
    readonly char[] cs = new char[] { ' ' };
    public Scanner() { s = new string[0]; i = 0; }
    public string[] scan => ReadLine().Split();
    public int[] scanint => Array.ConvertAll(scan, int.Parse);
    public long[] scanlong => Array.ConvertAll(scan, long.Parse);
    public double[] scandouble => Array.ConvertAll(scan, double.Parse);
    public string next
    {
        get
        {
            if (i < s.Length) return s[i++];
            string st = ReadLine();
            while (st == "") st = ReadLine();
            s = st.Split(cs, StringSplitOptions.RemoveEmptyEntries);
            i = 0;
            return next;
        }
    }
    public int nextint => int.Parse(next);
    public long nextlong => long.Parse(next);
    public double nextdouble => double.Parse(next);
}
0