【字符串+简单哈希映射】HDU-1144 Prerequisites?

本文介绍了一种算法,用于判断学生所选课程是否满足特定类别的最低课程数量要求。通过字符串比较,确保课程编号正确匹配,从而实现课程选择的有效性验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在这里插入图片描述

注解

1、重在理解题意,其实就是简单的字符串处理。要学习K门课程,总共有m类课程,每类课程都有学习的最低门数要求。问学习的这K门课程,能否满足所有类的最低课程门数要求?能就输出yes,不能就输出no。
2、简单字符串处理。要用字符串,而不能用数字存课程编号。然后用简单的字符串比较函数compare,一一比较就可以了。

代码

#include <iostream>

using namespace std;

int main() {

    int k;
    cin>>k;
    while(k){
        int m;
        cin>>m;
        string selCour[k];
        for(int i=0; i<k; i++){
            cin>>selCour[i];
        }
        int total = 0;
        for(int i=0; i<m; i++){
            int cnt = 0;
            int c;
            int r;
            cin>>c;
            cin>>r;
            string sameCatCour[c];
            for(int j=0; j<c; j++){
                cin>>sameCatCour[j];
                for(int s=0; s<k; s++){
                    if(selCour[s].compare(sameCatCour[j])==0){
                        cnt++;
                    }
                }
            }
            if(cnt>=r){
                total++;
            }
        }
        if(total==m){
            cout<<"yes"<<endl;
        }
        else{
            cout<<"no"<<endl;
        }
        cin>>k;
    }

    return 0;
}

结果

在这里插入图片描述

<think>好的,用户现在问的是如何用Python代码实现对字符串的SHA-256哈希计算。首先,我需要回忆Python中处理哈希的库,通常是hashlib模块。然后,步骤应该是导入hashlib,创建sha256对象,更新数据(注意编码,因为字符串需要转为字节),最后获取哈希值。 首先,用户可能需要知道基本的步骤。比如,字符串需要先编码成字节,常用的是utf-8编码。然后使用hashlib.sha256()创建哈希对象,调用update方法传入字节数据,最后用hexdigest()得到十六进制字符串。 需要注意的地方可能包括编码问题,如果用户用了其他编码可能会导致不同的结果,所以必须明确使用utf-8。另外,示例代码要简洁,展示关键步骤。 然后,用户可能的疑问点可能有:是否需要处理大字符串?是否需要分块更新?但基本示例应该是简单的单行字符串处理。 现在,我需要写出具体的代码示例,解释每一步的作用。比如导入模块,编码字符串,创建哈希对象,更新数据,获取结果。 最后,按照要求生成相关问题,需要围绕SHA-256在Python中的应用,可能的问题包括不同编码的影响、处理文件的哈希、验证哈希值、加盐处理、与其他哈希算法的比较等。 </think> 在Python中可以使用内置的`hashlib`模块实现SHA-256哈希计算,主要步骤包括:将字符串编码为字节(需指定编码方式,如UTF-8)、创建SHA-256哈希对象、更新数据并生成哈希值。以下是具体示例: ```python import hashlib def sha256_hash(input_str): # 将字符串编码为UTF-8字节(必须步骤,哈希算法处理字节而非字符串) byte_data = input_str.encode('utf-8') # 创建SHA-256哈希对象 sha256_obj = hashlib.sha256() # 向哈希对象中添加数据(支持分块更新,大文件时更高效) sha256_obj.update(byte_data) # 生成16进制字符串形式的哈希值(64位) return sha256_obj.hexdigest() # 示例:计算"Hello World"的SHA-256哈希 result = sha256_hash("Hello World") print(f"SHA-256哈希值: {result}") # 输出:a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e ``` ### 关键说明: - **编码要求**:必须通过`.encode('utf-8')`将字符串转为字节,不同编码(如GBK)会导致不同哈希结果; - **分块处理**:对于大字符串/文件,可多次调用`update()`分块传入数据(如逐行读取文件并更新),最终结果与一次性传入相同; - **输出形式**:`hexdigest()`返回十六进制字符串(常用),`digest()`返回原始字节(32字节)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值