蒟蒻求助:10分可完全看不出算法有什么问题
查看原帖
蒟蒻求助:10分可完全看不出算法有什么问题
47205
jzy_go楼主2020/8/3 23:26

我的思路是预处理每个颜色的个数,记录两个数组rr和ll,分别为当前客栈右边(包含)每个颜色个数和左边每个颜色个数,枚举客栈, 设当前客栈为i,当枚举到i+1时,r r [ a [ i ] ]- -,l l [ a [ i ] ]+ +,如果当前客栈价钱合适,就枚举颜色种类 j ,ans加上r r [ j ] * l l [ j ],l l [ j ]清零,理论上应该没问题,可只过了第一个点。

#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
		f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=x*10+(ch-'0');
		ch=getchar();
	}
	return x*f;
}
int ll[201],rr[201];
int pp[200001];
int a[200001];
int l,r;
int main()
{
//	freopen("P1311_2.in","r",stdin);
//	freopen("P1311_2.out","w",stdout);
	int n=read();
	int k=read();
	int p=read();
	for(int i=1;i<=n;i++)
	{
		a[i]=read();
		rr[a[i]]++;
		pp[i]=read();
	}
	long long ans=0;
	for(int i=2;i<=n;i++)
	{
		rr[a[i-1]]--;
		ll[a[i-1]]++;
		if(pp[i]<=p)
		{
			for(int j=0;j<=k-1;j++)
			{
				ans+=rr[j]*ll[j];
				ll[j]=0;
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

2020/8/3 23:26
加载中...