对于这道题而言,因为可能有重复的组合出现,而且重复的组合会对答案造成一定的影响,所以在这里需要标记。而对于一个二元组的出现,就可以用到map中嵌套pair来标记。
#include<bits/stdc++.h>
using namespace std;
const int nn=10010;
int n,p,h,m;
int d[nn],c[nn];
map<pair<int,int>, bool> existed;
inline int read()
{
int x=0,f=1; char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
int main()
{
n=read(); p=read(); h=read(); m=read();
for(int i=1;i<=m;++i)
{
int a=read();
int b=read();
if(a>b) swap(a,b);
if(existed[make_pair(a,b)]) continue;
existed[make_pair(a,b)]=true;
d[a+1]-=1; d[b]+=1;
}
c[0]=h;//c数组就相当于是d数组的前缀和
for(int i=1;i<=n;++i)
{
c[i]=c[i-1]+d[i];
cout<<c[i]<<endl;
}
return 0;
}