#D0961. 欠题

欠题

题目描述

33DAI 给自己安排了 nn 天的出题进度,下标从 11 开始。第 ii 天他原本计划出 aia_i 道题,但实际出了 bib_i 道题。

记第 ii 天结束时的余额为 balibal_i(bal0=0bal_0 = 0),它表示到当天为止的净账:

  • bali>0bal_i > 0:还净欠 balibal_i 道题;
  • bali<0bal_i < 0:反而净多出了 −bali-bal_i 道题;
  • bali=0bal_i = 0:刚好两清。

第 ii 天一共需要出多少道题,由前一天的余额决定:

  • 若 bali−1>0bal_{i-1} > 0(前面欠了题),欠的这些题要额外按 22 倍补上,所以这一天一共需要出 ai+2×bali−1a_i + 2 \times bal_{i-1} 道;
  • 若 bali−1≤0bal_{i-1} \le 0(前面不欠题,或多出了题),多出的部分直接算作今天已经出了的题,所以这一天只需要出 ai+bali−1a_i + bal_{i-1} 道。

当天结束时,余额等于「实际出的题数」减去「当天一共需要出的题数」:

$$bal_i = \begin{cases} b_i - (a_i + 2 \times bal_{i-1}), & bal_{i-1} > 0 \\[2pt] b_i - (a_i + bal_{i-1}), & bal_{i-1} \le 0 \end{cases}$$

这个余额会一路带到后面的天数里继续参与计算。

注意式子里的 bali−1bal_{i-1} 是可以为负的:当 bali−1<0bal_{i-1} < 0 且 −bali−1>ai-bal_{i-1} > a_i 时,ai+bali−1a_i + bal_{i-1} 会小于 00,表示这一天一道题都不用出(前面多出的题已经把它盖过去了),此时余额依然按上面的式子计算。

nn 天结束后,记 balnbal_n 的绝对值为 ansans:若 baln>0bal_n > 0,ansans 就是 33DAI 还欠的题数;若 baln≤0bal_n \le 0,ansans 就是最后净多出的题数。请输出 ansans 对 998244353998244353 取模的结果。

输入格式

输入的第一行是一个整数 tt,表示测试用例组数。

接下来依次给出 tt 组测试用例,每组测试用例的格式为:

  • 第一行一个整数 nn,表示计划的天数;
  • 第二行 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n,表示每天原本计划出的题数;
  • 第三行 nn 个整数 b1,b2,…,bnb_1, b_2, \dots, b_n,表示每天实际出的题数。

输出格式

对每组测试用例输出一行一个整数,表示该组的 ansans 对 998244353998244353 取模的结果。

2
3
5 6 7
3 0 40
3
6 6 6
6 6 6
37
0

样例 1 解释

第 1 组:a=(5,6,7)a = (5, 6, 7),b=(3,0,40)b = (3, 0, 40)。

  • 第 11 天:bal0=0bal_0 = 0,属于 bal0≤0bal_0 \le 0 的情形,需要出 5+0=55 + 0 = 5 道,实际出了 33 道,bal1=3−5=−2bal_1 = 3 - 5 = -2(净多出 22 道);
  • 第 22 天:bal1=−2≤0bal_1 = -2 \le 0,多出的 22 道算作今天出的,需要出 6+(−2)=46 + (-2) = 4 道,实际出了 00 道,bal2=0−4=−4bal_2 = 0 - 4 = -4(净多出 44 道);
  • 第 33 天:bal2=−4≤0bal_2 = -4 \le 0,需要出 7+(−4)=37 + (-4) = 3 道,实际出了 4040 道,bal3=40−3=37bal_3 = 40 - 3 = 37。

最终 bal3=37>0bal_3 = 37 > 0,即还净欠 3737 道,ans=37ans = 37,对 998244353998244353 取模仍是 3737,输出 37。

第 2 组:这三天每天原本计划出 66 道、实际也出了 66 道,于是一直有 bal1=bal2=bal3=0bal_1 = bal_2 = bal_3 = 0,ans=0ans = 0,输出 0。

4
2
5 5
3 0
3
3 0 8
9 0 10
3
4 4 4
10 0 20
2
7 5
0 0
3
14
32
2

样例 2 解释

第 1 组:a=(5,5)a = (5, 5),b=(3,0)b = (3, 0)。

  • 第 11 天需要 55 道、出了 33 道,bal1=−2bal_1 = -2;
  • 第 22 天需要 5+(−2)=35 + (-2) = 3 道、出了 00 道,bal2=0−3=−3bal_2 = 0 - 3 = -3。

最终 bal2=−3≤0bal_2 = -3 \le 0,即最后净多出 33 道,ans=3ans = 3,输出 3。

第 2 组:a=(3,0,8)a = (3, 0, 8),b=(9,0,10)b = (9, 0, 10)。

  • 第 11 天需要 33 道、出了 99 道,bal1=9−3=6bal_1 = 9 - 3 = 6(净欠 66 道);
  • 第 22 天:bal1=6>0bal_1 = 6 > 0,欠的 66 道要按 22 倍补,需要出 0+2×6=120 + 2 \times 6 = 12 道,实际出了 00 道,bal2=0−12=−12bal_2 = 0 - 12 = -12;
  • 第 33 天:bal2=−12≤0bal_2 = -12 \le 0,需要出 8+(−12)=−48 + (-12) = -4 道,也就是一道都不用出;实际出了 1010 道,bal3=10−(−4)=14bal_3 = 10 - (-4) = 14。

最终 bal3=14>0bal_3 = 14 > 0,即还净欠 1414 道,ans=14ans = 14,输出 14。

第 3 组:a=(4,4,4)a = (4, 4, 4),b=(10,0,20)b = (10, 0, 20)。

  • 第 11 天需要 44 道、出了 1010 道,bal1=6bal_1 = 6;
  • 第 22 天需要 4+2×6=164 + 2 \times 6 = 16 道、出了 00 道,bal2=−16bal_2 = -16;
  • 第 33 天需要 4+(−16)=−124 + (-16) = -12 道(一道都不用出)、出了 2020 道,bal3=20−(−12)=32bal_3 = 20 - (-12) = 32。

最终 bal3=32>0bal_3 = 32 > 0,即还净欠 3232 道,ans=32ans = 32,输出 32。

第 4 组:a=(7,5)a = (7, 5),b=(0,0)b = (0, 0)。

  • 第 11 天需要 77 道、出了 00 道,bal1=−7bal_1 = -7;
  • 第 22 天需要 5+(−7)=−25 + (-7) = -2 道(一道都不用出)、出了 00 道,bal2=0−(−2)=2bal_2 = 0 - (-2) = 2。

最终 bal2=2>0bal_2 = 2 > 0,即还净欠 22 道,ans=2ans = 2,输出 2。

样例 3

见 owed3.in 与 owed3.ans。

样例 4

见 owed4.in 与 owed4.ans。

样例 5

见 owed5.in 与 owed5.ans。

数据范围

对于所有测试数据,保证:

  • 1≤t≤5001 \le t \le 500;
  • 1≤n≤201 \le n \le 20;
  • 0≤ai≤1090 \le a_i \le 10^9,0≤bi≤1090 \le b_i \le 10^9;
  • 所有测试用例的 nn 之和不超过 10510^5。

子任务

本题共 20 个测试点,按测试点计分:

测试点 分值 每个测试点 特殊限制
1∼61 \sim 6 3030 55 n≤8n \le 8 且 ai,bi≤1000a_i, b_i \le 1000
7∼127 \sim 12 n≤15n \le 15 且 ai,bi≤105a_i, b_i \le 10^5
13∼2013 \sim 20 4040 无额外限制

每个测试点单独评分,全部测试点的得分之和即为本题得分。