作业之考试n

在这里插入图片描述
在这里插入图片描述
统计到第z个客栈时颜色出现次数,保存可消费的位置。
遍历每个可消费的位置,方案数为每个同种颜色在两个位置间出现的次数乘以之后出现的次数(做到不重复计算),遇到与这个位置同样的颜色时,还要加上同种颜色在两个位置间出现的次数与之后出现的次数的和(因为这个位置可以与两个位置间匹配,也可以在这个位置后匹配,做到不漏)

#include<bits/stdc++.h>
using namespace std;
int ha[53][200010],kao[200010];
int h,k,l,m,n;
int main(){
//	freopen("hotel.in","r",stdin);
//	freopen("hotel.out","w",stdout);
	scanf("%d%d%d",&n,&k,&m);
	for(int z=1;z<=n;++z){
		int a,b;
		scanf("%d%d",&a,&b);
		ha[52][z]=a;
		for(int y=0;y<k;++y) ha[y][z]=ha[y][z-1];
		++ha[a][z];
		if(b<=m) kao[++h]=z;
	}
	for(int z=1;z<=h;++z)
		for(int y=0;y<k;++y)
			if(ha[y][kao[z]]){
				if(y==ha[52][kao[z]]){
					l+=(ha[y][n]-ha[y][kao[z-1]]-1);
					l+=(ha[y][kao[z]]-1-ha[y][kao[z-1]])*(ha[y][n]-ha[y][kao[z]]);
					continue;
				}
				l+=(ha[y][kao[z]]-ha[y][kao[z-1]])*(ha[y][n]-ha[y][kao[z]]);
			}
	printf("%d",l);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值