Description
Input
Output
Sample Input
1
5
2 1 3 0 3
2 2 0 1 0
Sample Output
1
Data Constraint
然后我们再考虑模,如果操作次数+4对正确性影响不大,那么我们什么时候才需要让某个地方再做4次以达到答案减小的目的呢,不难发现就是这种情况
如果这样的话我们的代价其实就是 左右两边的和 减去 中间的 (假设中间的是相同高度)
我们可以让中间全部加4,以此达到可以一次做完 那么这样答案就是左边的高度加上中间加四后高出来的高度
我们可以算出,在左边我们需要增加了多少次,在右边减去了多少,然后统计一下需要增加X次的个数(统计相邻的),这样我们每次找到一个最不亏的(亏的话干脆不加),就把答案加上增加的次数再减去少掉的次数就可以了。
代码:
var
a,b,d:array [1..100001] of longint;
i,j,k,n,t,ans:longint;
begin
readln(t);
for k:=1 to t do
begin
fillchar(d,sizeof(d),0);
readln(n);
for i:=1 to n do
read(a[i]);
for i:=1 to n do
begin
read(b[i]);
a[i]:=(b[i]-a[i]+4) mod 4;
end;
ans:=a[1];
for i:=1 to n-1 do
if (a[i]<a[i+1]) then
begin
ans:=ans+a[i+1]-a[i];
for j:=1 to a[i+1]-a[i]-1 do
if (d[j]<>0) then
begin
ans:=ans-(a[i+1]-a[i]-j);
d[j]:=d[j]-1;
inc(d[a[i+1]-a[i]]);
break;
end;
end
else inc(d[a[i+1]+4-a[i]]);
writeln(ans);
end;
end.