1.90分代码
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n],b[n],c[n],d[n];
int i=0,j=0;
for(i=0;i<n;i++)
{
cin>>a[i]>>b[i];
}
for(i=0;i<n;i++)
{
cin>>c[i]>>d[i];
}
long long sum=0;
for(i=0,j=0;i<n,j<n;)
{
if(a[i]>c[j])
{
if(d[j]<=a[i])
{
j++;
}
else if(d[j]<=b[i])
{
sum +=d[j]-a[i];
j++;
}
else
{
sum +=b[i]-a[i];
i++;
}
}
else
{
if(b[i]<=c[j])
{
i++;
}
else if(d[j]<b[i])
{
sum+=d[j]-c[j];
j++;
}
else
{
sum+=b[i]-c[j];
i++;
}
}
}
cout<<sum;
}
/*
4
2 4
5 6
9 13
14 15
2 4
5 7
10 11
13 14
*/
2.原因
for循环
for(i=0,j=0;i<n,j<n;)
{
...
}
表示 i<n或者j<n for循环就可以执行,容易死循环。并且评测结果为错误
for(i=0,j=0;i<n,j<n;) 与 for(i=0,j=0;i<n&&j<n;) 不一样,要注意
比如
本题对for循环的要求是,i,j有一个等于n就要跳出for循环
所以要改为
for(i=0,j=0;i<n&&j<n;)
{
...
}
3.满分代码
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n],b[n],c[n],d[n];
int i=0,j=0;
for(i=0;i<n;i++)
{
cin>>a[i]>>b[i];
}
for(i=0;i<n;i++)
{
cin>>c[i]>>d[i];
}
int sum=0;
for(i=0,j=0;i<n&&j<n;)
{
if(a[i]>c[j])
{
if(d[j]<=a[i])
{
j++;
}
else if(d[j]<=b[i])
{
sum +=d[j]-a[i];
j++;
}
else
{
sum +=b[i]-a[i];
i++;
}
}
else
{
if(b[i]<=c[j])
{
i++;
}
else if(d[j]<b[i])
{
sum+=d[j]-c[j];
j++;
}
else
{
sum+=b[i]-c[j];
i++;
}
}
}
cout<<sum;
}