luogu#P12209. [蓝桥杯 2023 国 Python B] 交易账本
[蓝桥杯 2023 国 Python B] 交易账本
题目描述
小蓝最近研发了一种新的记账方式,并邀请了一些用户参加测试。交易账本可以看作是交易记录的集合,每条交易记录都有着一个独一无二的交易编号 (编号大小反映了交易记录产生的时间顺序, 小的交易记录先发生于 大的交易记录),每条交易记录包含一个或多个输入信息以及一个或多个输出信息。
其中输入来自于已经发生过的某笔交易的某个输出,可以理解为这笔钱从某笔交易输出后继续输入到了当前这笔交易中,输入信息主要包含以下数据: 、,这表示当前输入来自于交易编号为 的第 ()个输出;输出信息主要包含以下数据:、,表示将 数目的钱转移到了账户编号为 的账户上。注意,当 和 都为 时,表明这是一笔特殊交易,由系统账户直接产生输出,特殊交易只含有一个输入和一个输出,可以认为系统账户拥有无限多数目的钱,特殊交易一定可以成功。
一个合法的账本应满足以下条件:
- 对于每笔交易记录,所有的输入中涉及到的钱的总数目应和所有输出中钱的总数目相等;
- 交易中的一个输出要么不使用,要使用的话输出中的钱应该全部分配给下一个输入,而不能分配给多个输入(特殊交易除外);
- 交易按照顺序进行,不可以在某笔交易中引用还未发生的交易。
现在已知一共有 个不同的账户,初始时所有账户钱数目都为 ,账本上总计有 条交易记录(按照交易完成的顺序进行记录),请你来判断下账本上的记录是否是合法的。
输入格式
输入的第一行包含一个整数 ,表示有 组输入数据。
对于每组输入数据:
第一行包含两个整数 ,用一个空格分隔,分别表示账户的数目和账本的交易记录数目,其中账户编号为 ,交易记录编号为 。
接下来 行,每行包含一条交易记录的信息,交易记录编号依次为 。第一个整数 表示输入的个数,接下来包含 个输入信息,每个输入信息包含 和 两个整数;接下来包含一个整数 表示输出的个数,然后接着包含 个输出信息,每个输出信息包含 和 两个整数。
输出格式
对于每组输入数据输出一行,如果账本记录合法则输出英文单词 ,否则输出英文单词 。
4
3 3
1 -1 -1 1 0 100
1 0 0 2 1 50 2 50
2 1 0 1 1 1 2 100
3 3
1 -1 -1 1 0 100
1 0 0 2 1 50 2 50
2 1 0 1 1 1 2 150
3 3
1 -1 -1 1 0 100
1 0 0 2 1 50 2 50
3 0 0 1 0 1 1 1 2 200
3 3
1 -1 -1 1 0 100
2 0 0 2 0 2 1 100 2 100
1 -1 -1 1 2 100
YES
NO
NO
NO
提示
样例说明
对于第一个数据:第一条交易 为特殊交易,给账户 0 转入了 100;第二条交易 将上一条交易的唯一一个输出作为当前交易的输入,有两个输出,分别给账户 1 和 2 转入了 50;最后一条交易 将上一条交易的两个输出作为当前交易的输入,给账户 2 转入了 100 。
对于第二个数据,第三条交易中输入与输出总额不相等。
对于第三个数据,第一条交易中的输出被使用了超过一次。
对于第四个数据,第二条交易中引用了还未发生的交易的输出。
评测用例规模与约定
对于所有评测用例, ,,,, 交易中涉及到钱的数目 ,。