题意:顺序遍历给定区间,每步只能走一步或两步,问最少步数。
#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 1005;
int l = -inf,r = inf;
int trans( int a,int b ){
int _l = max( l,a );int _r = min(r,b);
if( _l <= _r ){
l = _l;r = _r;
return 0;
}else{
if( b < l ){
r = b;
int ll = l;
if( l-b&1&& a<b ){
l = b-1;
}else l = b;
return (ll-b+1)/2;
}else{
int rr = r;
l = a;
if( a-r&1&&a<b ){
r = a+1;
}else r = a;
return ( a-rr+1 )/2;
}
}
}
int a[maxn],b[maxn];
int main(){
int T;
scanf("%d",&T);
while(T--){
int n,ans = 0;
scanf("%d",&n);
l = -inf;r = inf;
for( int i = 1;i <= n;i++ ){
scanf("%d%d",&a[i],&b[i]);
ans += trans( a[i],b[i] );
}
printf("%d\n",ans);
}
return 0;
}