結果

問題 No.53 悪の漸化式
ユーザー nanophoto12nanophoto12
提出日時 2014-10-31 01:03:19
言語 C#(csc)
(csc 3.9.0)
結果
AC  
実行時間 29 ms / 5,000 ms
コード長 3,392 bytes
コンパイル時間 1,282 ms
コンパイル使用メモリ 106,368 KB
実行使用メモリ 18,176 KB
最終ジャッジ日時 2024-12-30 14:53:11
合計ジャッジ時間 2,630 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 20
権限があれば一括ダウンロードができます
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #
プレゼンテーションモードにする

using System;
using System.Globalization;
using System.Text;
class Program
{
internal class BigInt
{
private static readonly int _size = 56;
private static readonly int _decimalDigits = _size - 2;
private readonly int[] _buffer = new int[_size];
private static readonly int _upThreshold = 100000000;
public BigInt(int source)
{
_buffer[_decimalDigits] = source;
}
public BigInt(BigInt source)
{
Array.Copy(source._buffer, _buffer, _buffer.Length);
}
public override string ToString()
{
var buider = new StringBuilder();
for (int i = _buffer.Length - 1; i >= _decimalDigits; i--)
{
if (_buffer[i] != 0)
{
buider.Append(_buffer[i].ToString(CultureInfo.InvariantCulture));
}
}
if (buider.Length == 0)
{
buider.Append("0.");
}
else
{
buider.Append(".");
}
for (int i = _decimalDigits-1; i >= _decimalDigits - 5; i--)
{
buider.Append(_buffer[i].ToString("00000000"));
}
return buider.ToString();
}
public BigInt Mul(int value)
{
var newInt = new BigInt(this);
var up = 0;
for (int i = 0; i < _size; i++)
{
newInt._buffer[i] *= value;
newInt._buffer[i] += up;
if (newInt._buffer[i] >= 1e8)
{
up = newInt._buffer[i]/_upThreshold;
newInt._buffer[i] %= _upThreshold;
}
else
{
up = 0;
}
}
return newInt;
}
public BigInt Subtract(BigInt value)
{
var newInt = new BigInt(this);
for (int i = 0; i < _size; i++)
{
newInt._buffer[i] -= value._buffer[i];
if (newInt._buffer[i] < 0)
{
newInt._buffer[i] += _upThreshold;
newInt._buffer[i + 1] -= 1;
}
}
return newInt;
}
public BigInt Divide(int value)
{
var newInt = new BigInt(this);
for (int i = 0; i < _size; i++)
{
var down = newInt._buffer[i] % value;
if (down > 0)
{
newInt._buffer[i - 1] += _upThreshold*down/value;
}
newInt._buffer[i] /= value;
}
return newInt;
}
}
public static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
BigInt[] bigInts = new BigInt[101];
bigInts[0] = new BigInt(4);
bigInts[1] = new BigInt(3);
for (int i = 2; i <= n; i++)
{
bigInts[i] = bigInts[i - 1].Mul(19).Subtract(bigInts[i - 2].Mul(12));
bigInts[i] = bigInts[i].Divide(4);
}
Console.WriteLine(bigInts[n].ToString());
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0