CCF PTA 编程培训师资认证2021年7月C++兑换礼品

【题目描述】

小零和小壹是两个爱玩游戏的小孩,他俩平时最擅长的是解谜游戏,可今天 遇到了一个有点难的算法问题,希望能得到你的帮助。 他们面对的是一个电子装置,正面有 n 个排成一列的按钮,按钮上贴着编号 1~n 号的彩色标签,标签的颜色一共有 k 种(颜色可用整数 0~k-1 表示),每个 按钮都各自对应着一个可用积分兑换礼品的礼盒,奇怪的是当只有一人按下按钮 时,装置没有任何反应,只有两人同时按动两个具有同样标签颜色的按钮时,这 两个按钮之间的所有按钮(包括这两个按钮)所对应的礼盒都被激活可以用积分 兑换礼品。 小零和小壹的积分加起来共有 p 分,他俩决定用积分兑换一个礼品,希望你 帮他们算一算他俩共有多少种选择按钮的方案,保证可以得到一个兑换积分不超 过 p 分的礼品。

【输入格式】

输入数据有 n+1 行。 第一行三个整数 n, k, p,每两个整数之间用一个空格隔开,分别表示按钮 的个数 n,标签颜色的数目 k 和他俩的积分值 p; 接下来的 n 行,每行两个整数之间用一个空格隔开,第 i+1 行的两个整数分 别表示 第 i 号按钮的标签颜色 Ai 和第 i 号按钮对应礼盒的兑换积分要求 Bi。

【输出格式】

输出数据有一行。 一个正整数,表示可选择按钮的方案总数。

【输入样例】

5 2 3

0 5

1 3

0 2

1 4

1 5

【输出样例】

3

【输入输出样例说明】

小零和小壹要按同样颜色的按钮,所有可选的方案包括:选按钮①③,② ④,②⑤,④⑤,但是若选择按④⑤号按钮的话,④⑤号按钮之间的礼品兑换 积分最低需要 4 分 ,而两人只有 3 分,所以不满足要求。 因此,只有前 3 种方案可选。

【数据规模与约定】

对于 30%的数据,n ≤ 100;

对于 50%的数据,n ≤ 1000;

对于 100%的数据,2 ≤ n ≤ 200000,1 ≤ k≤ 50,0 ≤ p ≤ 100,0 ≤ Ai < k,0 ≤ Bi ≤ 100。

【解析】

本题关键点:数据存入数组进行对比,代码如下。

#include <iostream>
using namespace std;
int main(){
	int ans,x,y;
	ans=0;
	int n,k,p;
	cin>>n>>k>>p;
	int a[n]={};
	int b[n]={};
	for(int i=0;i<n;i++){
		cin>>a[i]>>b[i];
	} 	
	for(int m=0;m<n;m++){
		x=a[m];
		for(int j=m+1;j<n;j++){
			y=a[j];
			if(x==y){			
				if(b[m]<=p || b[j]<=p){
					ans++;				
				}							
			}
		}
	}	
	cout<<ans<<endl;
	return 0;
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈工程师Linda

感恩您的鼓励,我会继续创作作品

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值