結果
| 問題 |
No.269 見栄っ張りの募金活動
|
| コンテスト | |
| ユーザー |
14番
|
| 提出日時 | 2016-05-10 02:35:43 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,663 bytes |
| コンパイル時間 | 859 ms |
| コンパイル使用メモリ | 112,228 KB |
| 実行使用メモリ | 28,496 KB |
| 最終ジャッジ日時 | 2024-10-05 13:21:57 |
| 合計ジャッジ時間 | 7,746 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 1 TLE * 1 -- * 20 |
コンパイルメッセージ
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.Text;
using System.Linq;
class Program
{
public void Proc()
{
Reader.IsDebug = false;
int[] inpt = Reader.GetInt();
this.seitoCount = inpt[0];
this.goalValue = inpt[1];
this.addVal = inpt[2];
this.Init();
if(goalValue < 0) {
Console.WriteLine(0);
return;
}
this.dic = new long[seitoCount, goalValue + 1];
long ans = this.GetAns(0, this.goalValue);
Console.WriteLine(ans);
}
private long ModNum = 1000000000 + 7;
private long GetAns(int idx, int remain) {
if(this.dic[idx, remain] > 0) {
return this.dic[idx, remain];
}
long ans = 0;
if(remain == 0) {
ans = 1;
} else if(idx == this.seitoCount - 1) {
ans = 1;
} else
{
for(int i=0; i * (this.seitoCount - idx) <=remain; i++) {
ans += this.GetAns(idx+1, remain - i * (this.seitoCount - idx));
ans = ans % this.ModNum;
}
}
this.dic[idx, remain] = ans;
return ans;
}
private long[,] dic;
private void Init() {
int minus = 0;
for(int i=seitoCount - 1; i>=1; i--) {
minus += i * addVal;
}
this.goalValue -= minus;
}
private int seitoCount = 0;
private int goalValue = 0;
private int addVal = 0;
public class Reader
{
public static bool IsDebug = true;
private static String PlainInput = @"
55 2555 1
";
private static System.IO.StringReader Sr = null;
public static string ReadLine()
{
if (IsDebug)
{
if (Sr == null)
{
Sr = new System.IO.StringReader(PlainInput.Trim());
}
return Sr.ReadLine();
}
else
{
return Console.ReadLine();
}
}
public static int[] GetInt(char delimiter = ' ', bool trim = false)
{
string inptStr = ReadLine();
if (trim)
{
inptStr = inptStr.Trim();
}
string[] inpt = inptStr.Split(delimiter);
int[] ret = new int[inpt.Length];
for (int i = 0; i < inpt.Length; i++)
{
ret[i] = int.Parse(inpt[i]);
}
return ret;
}
}
static void Main()
{
Program prg = new Program();
prg.Proc();
}
}
14番