1058 选择题

解题代码

#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
struct que {
	int weight, sum, cnt;
	set<char> s;
}q[100];
struct wrong {
	int index, cnt;
}w[100];
bool cmp(wrong a, wrong b) {
	if (a.cnt != b.cnt) return a.cnt > b.cnt;
	return a.index < b.index;
}
int main() {
	int n_stu, n_que, temp, M = 0;
	char c;
	scanf("%d %d", &n_stu, &n_que);
	for (int i = 0; i < n_que; i++) {
		scanf("%d %d %d", &q[i].weight, &q[i].sum, &q[i].cnt);
		for (int j = 0; j < q[i].cnt; j++) {
			scanf(" %c", &c);
			q[i].s.insert(c);
		}
	}
	for (int i = 0; i < 100; i++) w[i].index = i + 1;
	for (int i = 0; i < n_stu; i++) {
		int score = 0;
		for (int j = 0; j < n_que; j++) {
			getchar(); getchar();
			scanf("%d", &temp);
			set<char> s1;
			for (int k = 0; k < temp; k++) {
				getchar();
				scanf("%c", &c);
				s1.insert(c);
			}
			getchar();
			if (s1 != q[j].s) {
				w[j].cnt++;
				M = max(w[j].cnt, M);
			}
			else score += q[j].weight;
		}
		if (i) printf("\n");
		printf("%d", score);
	}
	if (M) {
		printf("\n%d", M);
		sort(w, w + n_que, cmp);
		for (int i = 0; i < n_que; i++) {
			if (w[i].cnt != M) break;
			printf(" %d", w[i].index);
		}
	}
	else printf("\nToo simple");
	return 0;
}

测试结果

在这里插入图片描述

问题整理

1.不太基础的题目。
2.得知一位名叫柳神的算法大佬。
3.该题可以借鉴的优秀代码片段:
	vector<set<char>> right(m);//通过变量m直接创建m个set<char>大小的right
    vector<int> total(m), wrongCnt(m);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值