【PAT】1092 To Buy or Not to Buy (20分)---简单字符(串)hash

本文介绍了一种用于帮助用户决定是否在商店购买珠串的算法。通过比较商店中珠串的颜色和用户所需颜色,算法能判断出珠串是否包含所有需要的颜色,并计算出额外需要购买的珠子数量或缺失的珠子数量。

1092 To Buy or Not to Buy (20分)

Eva would like to make a string of beads with her favorite colors so she went to a small shop to buy some beads. There were many colorful strings of beads. However the owner of the shop would only sell the strings in whole pieces. Hence Eva must check whether a string in the shop contains all the beads she needs. She now comes to you for help: if the answer is Yes, please tell her the number of extra beads she has to buy; or if the answer is No, please tell her the number of beads missing from the string.

For the sake of simplicity, let’s use the characters in the ranges [0-9], [a-z], and [A-Z] to represent the colors. For example, the 3rd string in Figure 1 is the one that Eva would like to make. Then the 1st string is okay since it contains all the necessary beads with 8 extra ones; yet the 2nd one is not since there is no black bead and one less red bead.
在这里插入图片描述
Figure 1

Input Specification:

Each input file contains one test case. Each case gives in two lines the strings of no more than 1000 beads which belong to the shop owner and Eva, respectively.

Output Specification:

For each test case, print your answer in one line. If the answer is Yes, then also output the number of extra beads Eva has to buy; or if the answer is No, then also output the number of beads missing from the string. There must be exactly 1 space between the answer and the number.

Sample Input 1:

ppRYYGrrYBR2258
YrR8RrY

Sample Output 1:

Yes 8

Sample Input 2:

ppRYYGrrYB225

YrR8RrY

Sample Output 2:

No 2

思路总结

为简单哈希表, 把数字、大小写字母按ASCII值对应到hash表再按要求查询即可。

AC代码

#include <cstdio>
#include <cstring>
const int maxn = 130;
int hash[maxn] = {0};
char all[1010];
char str[1010];
int main()
{
	bool tag = true; //标志位,表示要买的色号是否齐全
	int less = 0;  //表示少几个
	scanf("%s%s",all,str);
	for(int i=0; i<strlen(all); i++){
		int key = all[i] - '\0';
		hash[key]++;
	}

	for(int i=0; i<strlen(str); i++){
		char c = str[i];
		int key = c - '\0';
		if(hash[key] == 0 ){
			tag = false;
			less ++;
		}
		else{
			hash[key]--;
		}
	}
	if(tag){
		int sum = 0; 	//多出的
		for(int i=0; i<maxn; i++){
			sum += hash[i];
		}
		printf("Yes %d\n",sum );

	}
	else{
		printf("No %d\n",less );
	}
	return 0;
}
【电动汽车充电站有序充电调度的散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(时电价调度)(Matlab代码实现)内容概要:本文介绍了基于蒙特卡洛和拉格朗日方法的电动汽车充电站有序充电调度优化方案,重点在于采用散式优化策略应对时电价机制下的充电需求管理。通过构建数学模型,结合不确定性因素如用户充电行为和电网负荷波动,利用蒙特卡洛模拟生成大量场景,并运用拉格朗日松弛法对复杂问题进行解求解,从而实现全局最优或近似最优的充电调度计划。该方法有效降低了电网峰值负荷压力,提升了充电站运营效率与经济效益,同时兼顾用户充电便利性。 适合人群:具备一定电力系统、优化算法和Matlab编程基础的高校研究生、科研人员及从事智能电网、电动汽车相关领域的工程技术人员。 使用场景及目标:①应用于电动汽车充电站的日常运营管理,优化充电负荷布;②服务于城市智能交通系统规划,提升电网与交通系统的协同水平;③作为学术研究案例,用于验证散式优化算法在复杂能源系统中的有效性。 阅读建议:建议读者结合Matlab代码实现部,深入理解蒙特卡洛模拟与拉格朗日松弛法的具体实施步骤,重点关注场景生成、约束处理与迭代收敛过程,以便在实际项目中灵活应用与改进。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值