PAT A1010

题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536

二分查找时,left = 2, right = max(36,N).

转进制时,防止溢出。

#include <cstdio>
#include <cstring>
typedef long long LL;
const LL inf = (1LL << 63) - 1;
int change(char a){
	if (a >= '0' && a <= '9')
		return a - '0';
	else if(a >= 'a' && a <= 'z')
		return a - 'a' + 10;
}

LL todecimal(char a[], int len, LL radix){
	int num;
	LL result = 0;
	for(int i = 0; i < len; i++){
		num = change(a[i]);
		if(num >= radix)
			return -1;
		result = result * radix + num;
		if(result < 0)
			return inf;
	}
	return result;
}

LL max(LL a, LL b){
	if(a > b)
		return a;
	else
		return b;
}

LL binarySearch(LL x, char a[], int len){
	LL y, left = 2, right, mid;
	right = max(36, x);
	while(left < right){
		mid = (left + right) / 2;
		y = todecimal(a, len, mid);
		if(y >= x)
			right = mid;
		else
			left = mid + 1;
	}
	y = todecimal(a, len, left);
	if(y == x)
		return left;
	else
		return 0;
}

int main(){
	char a[2][15];
	int tag;
	LL radix, N;
	scanf("%s %s %d %lld", a[0], a[1], &tag, &radix);
	int len = strlen(a[--tag]);
	N = todecimal(a[tag], len, radix);
	len = strlen(a[!tag]);
	LL other_radix = binarySearch(N, a[!tag], len);
	if(other_radix){
		printf("%lld\n", other_radix);
	}
	else
		printf("Impossible\n");
	return 0;
}

 

### 统计学生数量的方法 要统计给定学生学号列表中的学生总数,可以利用 Python 的集合(`set`)来去重并计算唯一的学生学号数量。以下是实现这一功能的具体方法: 通过将学生学号存入一个列表后转换为集合,再调用 `len()` 函数即可得到不重复的学生数量。 ```python def count_unique_students(student_ids): unique_student_count = len(set(student_ids)) # 使用 set 去重并统计长度 return unique_student_count # 示例输入 student_ids = ["S001", "S002", "S001", "S003", "S002"] unique_count = count_unique_students(student_ids) print(f"进入决赛的学生数量为: {unique_count}") ``` 上述代码片段展示了如何快速统计学生数量[^1]。这里的关键在于使用了集合的数据结构特性——自动去除重复项,从而确保每个学生仅被计入一次。 如果需要进一步扩展此功能至更复杂的应用场景,比如基于成绩筛选符合条件的学生,则可参考如下逻辑构建字典或对象模型进行管理[^2][^3]。 #### 扩展:结合字典统计特定条件下的学生数量 当涉及更多维度的信息时(例如成绩),可以通过字典记录每位学生的详细情况,并依据设定的标准过滤目标群体。 ```python students_info = { "S001": {"name": "Alice", "score": 95}, "S002": {"name": "Bob", "score": 87}, "S003": {"name": "Charlie", "score": 92} } def filter_students_by_score(students, min_score=90): qualified_students = [sid for sid, info in students.items() if info["score"] >= min_score] return qualified_students qualified_sids = filter_students_by_score(students_info) count_qualified = len(qualified_sids) print(f"达到分数标准的学生有{count_qualified}名,分别是:{', '.join(qualified_sids)}") ``` 以上脚本实现了对学生按成绩阈值分类的功能。它不仅能够帮助我们了解满足条件的人数,还提供了具体名单以便后续操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值