#include <cstdio> #include <algorithm> int main() { int n; scanf("%d",&n); for(int i=1; i<=n; i++) { int x[300]={0}; int m,a,b,s,max; scanf("%d",&m); for(int j=1; j<=m; j++) { scanf("%d%d",&a,&b); if (a>b) { int t=a; a=b; b=t; } a=(a+1)/2; b=(b+1)/2; x[a]++; x[b+1]--; } max=0; s=0; for(int j=1; j<=200; j++) { s+=x[j]; if (s>max) max=s; } printf("%d ",max*10); } return 0; }
题解:我们将每一个房间映射到走廊上,对于移动操作,只要对建立的走廊数组首端加一,末端的后一个储存单位减一,最后计算数组前缀和的最大值即可。