题目链接:Problem - 1556 (hdu.edu.cn)
笔者思路:利用一维差分数组进行区间同时+1的操作,然后还原为一维前缀和数组
笔者答案:
#include<stdio.h>
int cut[100010];
int main()
{
long N,a,b,i,k=1,j;
scanf("%ld",&N);
while(N!=0)
{
for(i=1;i<=N;i++)
{
scanf("%ld %ld",&a,&b);
cut[a]++;
cut[b+1]--;
}
for(i=1;i<=N;i++)
{
cut[i]=cut[i-1]+cut[i];
printf("%d ",cut[i]);
cut[i-1]=0;
if(i==N)
{
cut[i]=0;
cut[i+1]=0;//易错点:cut[i],cut[i+1]容易忘记赋为0
}
}
printf("\n");
scanf("%ld",&N);
}
return 0;
}
算法收获:
1.一维前缀和数组,输入原数组,求其一维前缀和数组这两个过程只需要一个数组即可,这样可以降低空间
编程收获:
1.wa时可以利用一些特殊的数据去测试,如一些边界条件
2.wa时可以找一个与自己写的程序的思路接近的正确答案,把正确的代码一步一步地修改成自己的代码,看哪一步开始wa
3.wa时可以重头思考程序的逻辑是否严谨,是否有一些边界条件未处理到
4.在写程序时,应该想地更全面,一步一步稳步推进,逻辑严谨