結果
| 問題 |
No.81 すべて足すだけの簡単なお仕事です。
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-05-15 17:21:59 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,171 bytes |
| コンパイル時間 | 7,918 ms |
| コンパイル使用メモリ | 195,072 KB |
| 実行使用メモリ | 6,272 KB |
| 最終ジャッジ日時 | 2025-05-15 17:22:09 |
| 合計ジャッジ時間 | 9,204 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 28 WA * 2 |
ソースコード
module main;
// https://yang33-kassa.jp/yukicoder/yukicoder081/ より
import std;
void main()
{
// 入力
int N = readln.chomp.to!int;
// 答えの計算と出力
auto vs = new string[](N);
long pA = 0, pB = 0;
long mA = 0, mB = 0;
immutable base = 10L ^^ 10;
foreach (i; 0 .. N) {
vs[i] = readln.chomp;
bool minus = false;
if (vs[i][0] == '-') {
minus = true;
vs[i].popFront;
}
auto pos = vs[i].countUntil('.');
if (pos == -1) {
pos = vs[i].length;
vs[i] ~= '.';
}
long a = 0;
foreach (j; 0 .. pos) {
a *= 10;
a += vs[i][j] - '0';
}
long b = 0;
vs[i] ~= "0".replicate(15);
foreach (j; pos + 1 .. pos + 11) {
b *= 10;
b += vs[i][j] - '0';
}
if (!minus) {
pA += a, pB += b;
pA += pB / base;
pB = pB % base;
} else {
mA += a, mB += b;
mA += mB / base;
mB = mB % base;
}
}
// 正の数と負の数の差
long nDiff = pA - mA;
nDiff += mB - mB < 0;
if (nDiff >= 0) {
pB -= mB;
if (pB < 0) {
pB += base;
mA++;
}
pA -= mA;
writefln("%d.%010d", pA, pB);
} else {
mB -= pB;
if (mB < 0) {
mB += base;
pA++;
}
mA -= pA;
writefln("-%d.%010d", mA, mB);
}
}