这道题最大的教训是就是自己的思路如果觉得可以写出来一定要再试再想,这道题就是明明已经就差查重这一步就去看答案了,烦死了。还有既然每次输入a,b之后都要加没必要还不如前面都去减最后加一次最高的h来的好也好想,以后每次正面走不同就反过来想想就不要一直走如果正面要考虑的情况太多的话,就反过来,然后这道题标的是差分,我对差分的理解是数列求和的反过程但是这道题好像并不用,还是说这也算差分?就挺迷的。以后想通了加上来。
然后代码如下。
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
set<pair<int,int>>ded;
int N[5001];
int main(){
int n,p,h,m;
cin>>n>>p>>h>>m;
while(m--){
int a,b;
cin>>a>>b;
if(a>b){
swap(a,b);
}
if(ded.count({a,b})==0){
ded.insert({a,b});
for(int i=a+1;i<b;i++){
N[i]--;
}
}
}
for(int i=1;i<=n;i++){
N[i]=N[i]+h;
cout<<N[i]<<endl;
}
return 0;
}
问了下学长,说这是贪心,行吧,更迷了,ok去刷一下贪心吧,心情好一些了,贪心还没开始刷,ok继续加油