题解:本题主要考查贪心+递推。
简要题意:两个客栈a,b,满足a,b颜色相同且[a,b]闭区间之间必须存在某个客栈的咖啡店的花费<=p。求满足的方案数。
1.贪心+递推:我们枚举客栈,用t来记录最近的花费小于等于p的客栈,以它为选择的咖啡店,向后枚举记录到上一个t的客栈颜色种类数(因为[a,b]闭区间有花费小于等于p的)。
所以如果这个客栈更新了t,ans+=num[这个客栈的颜色]-1
如果这个客栈没有更新t,ans+=num[这个客栈的颜色]
代码如下:
#include<iostream>
using namespace std;
int color[233333],num[233333],money[233333];
int n,k,p,t,ans;
int main()
{
cin>>n>>k>>p;
for(int i=1;i<=n;i++)cin>>color[i]>>money[i];
for(int i=1;i<=n;i++)
{
if(p>=money[i])
{
for(int j=i;j>t;j--)num[color[j]]++;
t=i;
ans+=num[color[i]]-1;
}
else ans+=num[color[i]];
}
cout<<ans<<endl;
return 0;
}