結果
| 問題 |
No.53 悪の漸化式
|
| コンテスト | |
| ユーザー |
nanophoto12
|
| 提出日時 | 2014-10-31 00:48:34 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 3,501 bytes |
| コンパイル時間 | 1,248 ms |
| コンパイル使用メモリ | 107,008 KB |
| 実行使用メモリ | 17,792 KB |
| 最終ジャッジ日時 | 2024-12-30 14:51:16 |
| 合計ジャッジ時間 | 2,431 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 9 WA * 10 RE * 1 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
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();
bool appending = false;
for (int i = _buffer.Length - 1; i >= _decimalDigits - 5; i--)
{
if (i == _decimalDigits - 1)
{
if (buider.Length == 0)
{
buider.Append("0.");
}
else
{
buider.Append(".");
}
appending = true;
}
if (_buffer[i] != 0 || appending)
{
appending = true;
buider.Append(_buffer[i].ToString(CultureInfo.InvariantCulture));
}
}
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[n+1];
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());
}
}
nanophoto12