結果
| 問題 |
No.176 2種類の切手
|
| コンテスト | |
| ユーザー |
aketijyuuzou
|
| 提出日時 | 2024-10-10 23:25:54 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
AC
|
| 実行時間 | 36 ms / 1,000 ms |
| コード長 | 2,626 bytes |
| コンパイル時間 | 1,075 ms |
| コンパイル使用メモリ | 111,896 KB |
| 実行使用メモリ | 28,424 KB |
| 最終ジャッジ日時 | 2024-10-10 23:25:58 |
| 合計ジャッジ時間 | 3,433 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 29 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("50 80 120");
//130
//50円切手と80円切手を組み合わせて、ちょうど120円にすることはできません。
//この場合、50円切手と80円切手を1枚ずつ使って130円にするのが、
//120円以上での最少額になります。
}
else if (InputPattern == "Input2") {
WillReturn.Add("123 456 1");
//123
//必ずしも両方の種類の切手を使う必要はありません。
//この場合、額面の小さい123円の切手を1枚貼ることになります。
}
else if (InputPattern == "Input3") {
WillReturn.Add("1234 1688 10000");
//10000
//うまくすれば、ちょうど10000円にできるようです。
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] wkArr = InputList[0].Split(' ').Select(X => int.Parse(X)).ToArray();
int A = wkArr[0];
int B = wkArr[1];
int T = wkArr[2];
//AかBの倍数なら、解が確定
if (T % A == 0 || T % B == 0) {
Console.WriteLine(T);
return;
}
int MinSumVal = int.MaxValue;
int SumVal;
//場合1 Aの切手だけを使う場合
SumVal = T + (A - T % A);
if (MinSumVal > SumVal) MinSumVal = SumVal;
//場合2 Bの切手だけを使う場合
SumVal = T + (B - T % B);
if (MinSumVal > SumVal) MinSumVal = SumVal;
//場合3 両方の切手を使う場合
//Yを固定してXを求める
var ModASet = new HashSet<int>();
for (int Y = 0; B * Y < T; Y++) {
SumVal = B * Y;
int RestVal = T - SumVal;
int ModA = RestVal % A;
if (ModA == 0) {
Console.WriteLine(T);
return;
}
//同じModが出たらBreak
if (ModASet.Add(ModA) == false) break;
SumVal = T + (A - ModA);
if (MinSumVal > SumVal) MinSumVal = SumVal;
}
Console.WriteLine(MinSumVal);
}
}
aketijyuuzou