結果
| 問題 |
No.966 引き算をして門松列(その1)
|
| コンテスト | |
| ユーザー |
with_yoru
|
| 提出日時 | 2020-01-13 22:31:07 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
AC
|
| 実行時間 | 65 ms / 2,000 ms |
| コード長 | 2,946 bytes |
| コンパイル時間 | 4,500 ms |
| コンパイル使用メモリ | 105,788 KB |
| 実行使用メモリ | 20,608 KB |
| 最終ジャッジ日時 | 2024-12-23 02:34:56 |
| 合計ジャッジ時間 | 5,591 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 5 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;
namespace yoru
{
class Program
{
static void Main(string[] args)
{
string[] inputString;
inputString = Console.ReadLine().Split(' ');
Int32 T = Int32.Parse(inputString[0]);
for (Int32 i = 0; i < T; ++i)
{
inputString = Console.ReadLine().Split(' ');
Int64 A = Int64.Parse(inputString[0]);
Int64 B = Int64.Parse(inputString[1]);
Int64 C = Int64.Parse(inputString[2]);
Int64 outputNumber = 0;
// 既に門松列
if (isKadomatu(A, B, C))
{
Console.WriteLine(outputNumber.ToString());
continue;
}
// すべて同じ数字だったら、B-2, C-1 が最小
if ((A == B) && (B == C))
{
B -= 2; outputNumber += 2;
C -= 1; outputNumber += 1;
if (!isKadomatu(A, B, C)) { outputNumber = -1; Console.WriteLine(outputNumber.ToString()); continue; }
Console.WriteLine(outputNumber.ToString());
continue;
}
// 両サイド同じ数字のとき
if (A == C)
{
C--; outputNumber++;
if (B == C) { B--; outputNumber++; }
if (!isKadomatu(A, B, C)) { outputNumber = -1; Console.WriteLine(outputNumber.ToString()); continue; }
Console.WriteLine(outputNumber.ToString());
continue;
}
// 真ん中と外が同じ数字のとき
if (B == A)
{
if (B < C) { B--; outputNumber++; }
else
{
A--; outputNumber++;
if (A == C) { A--; outputNumber++; }
}
if (!isKadomatu(A, B, C)) { outputNumber = -1; Console.WriteLine(outputNumber.ToString()); continue; }
Console.WriteLine(outputNumber.ToString());
continue;
}
if (B == C)
{
if (B < A) { B--; outputNumber++; }
else
{
C--; outputNumber++;
if (A == C) { C--; outputNumber++; }
}
if (!isKadomatu(A, B, C)) { outputNumber = -1; Console.WriteLine(outputNumber.ToString()); continue; }
Console.WriteLine(outputNumber.ToString());
continue;
}
// 同じ数字がないとき
{
// A>B>C にする
if (A < C) { Int64 temp = C; C = A; A = temp; }
Int64 diff1 = A - B;
Int64 diff2 = B - C;
if (diff1 >= diff2 && C > 1)
{
B -= (diff2 + 1); outputNumber += (diff2 + 1);
}
else
{
A -= (diff1 + 1); outputNumber += (diff1 + 1);
if (A == C) { A--; outputNumber++; }
}
if (!isKadomatu(A, B, C)) { outputNumber = -1; Console.WriteLine(outputNumber.ToString()); continue; }
Console.WriteLine(outputNumber.ToString());
continue;
}
}
return;
}
static bool isKadomatu(Int64 inA, Int64 inB, Int64 inC)
{
if (inA == inB) { return false; }
if (inB == inC) { return false; }
if (inC == inA) { return false; }
if (inA < 1) { return false; }
if (inB < 1) { return false; }
if (inC < 1) { return false; }
if (inA < inB && inB < inC) { return false; }
if (inA > inB && inB > inC) { return false; }
return true;
}
}
}
with_yoru