#PRODPR002. PROD-PR-002 实操二 查询服务契约实现

    ID: 863 Type: Default 2000ms 256MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>代码实操数据产品开发技术人员综合基础进阶综合题族:PROD-PR-002公开样题公开样题

PROD-PR-002 实操二 查询服务契约实现

PROD-PR-002 · 数据产品开发技术人员 · 综合 · 满分 25 分 · 基础进阶综合

可提交 C、C++、Java、Python 3 和 Node.js。评测机没有安装 Kotlin、PyPy,也没有支持大整数的 GNU awk,因此不开放 Kotlin、PyPy 和 Bash。

业务与规则

1. 请求字段user、status、sort、direction、page、size。status只允许ALL、PAID、CANCELLED;sort只允许ID、AMOUNT;direction只允许ASC、DESC;page≥1,1≤size≤100。否则输出ERROR INVALID_PARAM。

2. user在授权用户表中不存在时输出ERROR FORBIDDEN;参数错误优先于用户不存在。已知用户可以有0个授权对象,此时正常返回空列表。

3. 权限过滤后,按status过滤;total为分页之前的匹配行数。ID排序按字符串ASC或DESC;AMOUNT按金额指定方向,金额相同时始终按ID升序。

4. page采用从1开始的页号,offset=(page-1)*size;超出末页返回正常状态且0条。每条数据id唯一,不需要幂等副作用处理。

输入

第一行user status sort direction page size。下一行u,为授权用户数;随后u行:user c object1 ... objectc。用户唯一、各自对象不重复。下一行n;随后n行:id object status amount,status为PAID或CANCELLED。

输出

错误时只输出对应ERROR行。成功第一行“OK total returned_count”;随后各行“id amount”,按排序分页后输出。

范围

0≤u,n≤100000;授权对象总数≤100000;金额0至1e12分;-100≤page≤1e9,-100≤size≤1000。编号均为大写字母和数字。建议3秒、256MB,按语言校准。输出精确匹配。

样例输入

A ALL AMOUNT DESC 1 2
2
A 1 X
B 0
4
O1 X PAID 100
O2 X CANCELLED 100
O3 Y PAID 300
O4 X PAID 50

样例输出

OK 3 2
O1 100
O2 100

附件中的 sample.in、sample.out 与上面样例一致,不计入 25 分。计分点见测试配置,按点给分。

整数和文本按空白分隔后的 token 精确比较;小数允许绝对误差或相对误差 1e-6。时限 2 秒、内存 256MB;Java、Python 3 和 Node.js 时限按 2 倍,Java 内存按 2 倍。

题族:PROD-PR-002。状态:公开样题。组卷:否。公开:是。