这道题一开始想使用二维的bool型数组来存,最后统计。但看到数据范围。。。
所以就改用两个bool型数组(一维),分别储存横、列,最后将横、列面积求出来,再减去重复算的面积(横的个数*列的个数)
最重要的是这题的n、m坑了我两次。。。
#includeusing namespace std;int n,m,b,g,B[5010],G[5010],Ax,Ag,ans;int main(){ scanf("%d%d%d%d",&n,&m,&b,&g); for(int i=1;i<=b;i++){ int x,y; scanf("%d%d",&x,&y); for(int j=x;j<=y;j++) B[j]=1; } for(int i=1;i<=g;i++){ int x,y; scanf("%d%d",&x,&y); for(int j=x;j<=y;j++) G[j]=1; } for(int i=1;i<=n;i++) Ax+=B[i]; for(int i=1;i<=m;i++) Ag+=G[i]; ans=Ax*m+Ag*n-Ax*Ag; printf("%d\n",ans); return 0;}