結果
問題 | No.53 悪の漸化式 |
ユーザー |
![]() |
提出日時 | 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.
ソースコード
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());}}