#PRODPR002. 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。状态:公开样题。组卷:否。公开:是。