水题求助,可能是题目理解错了
查看原帖
水题求助,可能是题目理解错了
826691
onlyfiee楼主2023/10/31 08:31
#include<bits/stdc++.h>
#define col first
#define cost second
using namespace std;
const int N=2e5+50;
int n,k,p;
pair<int,int>a[N];
int main()
{
	long long ans=0;
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>k>>p;
	for(int i=1;i<=n;i++)	cin>>a[i].col>>a[i].cost; 
	sort(a+1,a+1+n);//把颜色相同的排序在一起,并且把费用从小到大排序
	int l=1,r=l; //l为当前费用<=p的 编号,r为颜色相同的编号 
	for(int i=1;i<=n;i+=r)
	{
		l=i;
		while(a[l+1].cost<=p&&a[l+1].col==a[i].col)	l++,r=l;
		while(a[r+1].col==a[i].col)	r++;
		ans+=(long long)(r-i+r-l)*(l-i+1)/2;//对于排序后的数组,这是一个等差数列。 
	}
	cout<<ans<<endl;
	return 0;
}

如果可以提供hack 也谢谢qwq

2023/10/31 08:31
加载中...