按照题意模拟即可:
第一行永远都只会扫描500个格子。因为就算第一行出现了地图,那么列的范围也是在下一行才会变。
所以第一行扫描的格子为500(499+1,右边界+1)。
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int ans;
int n;
vector<int>v[N];
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
int x,y;cin>>x>>y;
v[x].push_back(y);
}
int r=499;
for(int i=0;i<1000;i++) //从第一行枚举到最后一行
{
int cur=r;
ans+=cur+1;
for(auto j:v[i])
{
if(cur>=j) r=r+(i-j);
}
if(r<0)r=0;
if(r>999)r=999;
}
cout<<ans;
return 0;
}