QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#706233#8067. Scientific Gradingjerry2423WA 9ms10716kbPython32.3kb2024-11-03 09:34:132024-11-03 09:34:13

Judging History

This is the latest submission verdict.

  • [2024-11-03 09:34:13]
  • Judged
  • Verdict: WA
  • Time: 9ms
  • Memory: 10716kb
  • [2024-11-03 09:34:13]
  • Submitted

answer

import math
import sys

billion = 1_000_000_000

def normalize(xs, xe):
    if xs == 0:
        return 0, 0
    correction = int(math.ceil(math.log(billion / abs(xs), 10)))
    xs *= 10 ** correction
    xe -= correction
    return int(xs), xe

def align(xs, xe, ys, ye):
    aligned = 0
    if xe >= ye:
        if xe - ye <= 9:
            delta = xe - ye
            ys //= 10 ** delta
            ye += delta
        else:
            aligned = 1
    else:
        if ye - xe <= 9:
            delta = ye - xe
            xs //= 10 ** delta
            xe += delta
        else:
            aligned = 2
    return xs, xe, ys, ye, aligned

def add(xs, xe, ys, ye):
    xs, xe, ys, ye, aligned = align(xs, xe, ys, ye)
    if aligned == 0:
        zs = xs + ys
    elif aligned == 1:
        zs = xs
    else:
        zs = ys
    ze = 0 if zs == 0 else xe
    # print(xs, xe, ys, ye, zs, ze)
    return normalize(zs, ze)

def sub(xs, xe, ys, ye):
    xs, xe, ys, ye, aligned = align(xs, xe, ys, ye)
    if aligned == 0:
        zs = xs - ys
    elif aligned == 1:
        zs = xs
    else:
        zs = ys
    ze = 0 if zs == 0 else xe
    return normalize(zs, ze)

def mul(xs, xe, ys, ye):
    zs = int(round(xs * ys / billion))
    ze = xe + ye
    return normalize(zs, ze)

def div(xs, xe, ys, ye):
    zs = int(round(((xs * billion * 10) / ys)))
    ze = xe - ye - 1
    return normalize(zs, ze)

def process(string):
    s, e = string.split("e")
    s = int(float(s) * billion)
    e = int(e)
    return s, e

xs, xe = process(input().strip())
ys, ye = process(input().strip())

#print(xs, xe)
#print(ys, ye)
#print(*div(xs, xe, ys, ye))
#sys.exit(0)

x = (xs, xe)
y = (ys, ye)
ans = [add(*x, *y), sub(*x, *y), mul(*x, *y), div(*x, *y)]

for zts, zte in ans:
    zs, ze = process(input().strip())
    # print("given   ", zs, ze)
    # print("expected", zts, zte)
    correct = True
    error1 = sub(zs, ze, zts, zte)
    error1 = abs(error1[0]), error1[1]
    correct = correct and (error1 == (0, 0) or error1[1] < -9)
    print("error1:", *error1)
    #if error1 != (0, 0):
    error2 = div(*error1, abs(zs), ze)
    correct = correct and (error2 == (0, 0) or error2[1] < -9)
    print("error2:", *error2)

    if zts == zs and zte == ze:
        print("Correct")
    else:
        print("Incorrect")

詳細信息

Test #1:

score: 0
Wrong Answer
time: 9ms
memory: 10716kb

input:

+2.000000000e+1
+3.000000000e+2
+3.200000000e+2
-2.800000000e+2
+6.000000000e+3
+6.666666667e-2

output:

error1: 0 0
error2: 0 0
Correct
error1: 0 0
error2: 0 0
Correct
error1: 0 0
error2: 0 0
Correct
error1: 0 0
error2: 0 0
Correct

result:

wrong answer 1st lines differ - expected: 'Correct', found: 'error1: 0 0'