1058 选择题(字符串处理)

字符串处理我的噩梦。
看dalao才写出来的,不过写的太久了,这个时长考试黄花菜都凉了。

#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
#define ll long long
string ans[110];//答案 个数 
int score[110];//正确得分 
int person[110];//每个人的得分情况 
int main(){
	int n,m;
	cin>>n>>m;//人数 题目个数
	for(int i=0;i<m;i++){
		int sc,chos,count;
		cin>>sc>>chos>>count;
		for(int j=0;j<count;j++){
			char xz;
			cin>>xz;
			ans[i]+=xz;
		}
		score[i]=sc;
	} 
	int cuowu[110];
	memset(cuowu,0,sizeof(cuowu));
	int flag = 1;
	for(int i=0;i<n;i++){//人数 
	    int sc=0;//人的得分 
	    scanf("\n");
	    for(int j=0;j<m;j++){//几道题 
	        if(j>0) scanf(" ");
	        int cnt;
	        scanf("(%d",&cnt);
	        string s="";
	        for(int k=0;k<cnt;k++){
	        	char c;
	        	scanf(" %c",&c);
	        	s+=c;
			}
			if(s==ans[j]) sc+=score[j];
			else {
			   cuowu[j]++;//错误增加 
			   flag=0;
	       	}
			scanf(")");
		}
		cout << sc << '\n';
	}
	if(flag) {
	   cout << "Too simple" <<'\n';
	   return 0;
	}
	int index=0,cishu=cuowu[0];
	set<int> st;
	st.insert(index);
	for(int i=1;i<m;i++){
		if(cuowu[i]>cishu){
			st.clear();
			st.insert(i);
			cishu=cuowu[i];
		}else if(cuowu[i]==cishu){
			st.insert(i);
		}
	}
	cout << cishu << " ";
	set<int>::iterator it;
	for(it=st.begin();it!=st.end();){
		cout << *it + 1;
		if(++it!=st.end()){
			cout << " ";
		}
	}
	return 0;
}

大佬代码:

#include<iostream>
using namespace std;

int score[111] = {0},grade[1010] = {0},wrongCnt[111] = {0};
string Right[111];
int main() {
    int n,m,total;
    scanf("%d%d",&n,&m);
    for(int i = 1; i <= m; ++i) {
        scanf("%d %d ",&score[i],&total);
        getline(cin,Right[i]);
    }
    for(int i = 1; i <= n; ++i) { //n 个学生
        for(int j = 1; j <= m; ++j) {// 当前学生做m个题目
            while(getchar() != '(');//技巧,跳过所有非 ‘(’字符 
            string option;
            char c;
            while(scanf("%c",&c)) {//option存放(...)中的...字符
                if(c == ')') break;//技巧,遇到 ‘)’字符 ,结束死循环 
                option += c;
            }
            if(option == Right[j])//答对 
                grade[i] += score[j];
            else
                wrongCnt[j]++;
        }
    }
    for(int i = 1; i <= n; ++i)
        printf("%d\n",grade[i]);
    int MAX = 0;
    for(int i = 1; i <= m; ++i) {
        if(MAX < wrongCnt[i])
            MAX = wrongCnt[i];
    }
    if(MAX == 0) printf("Too simple");
    else {
        printf("%d",MAX);
        for(int i = 1; i <= m; ++i) {
            if(MAX == wrongCnt[i])
                printf(" %d",i);
        }
    }
    return 0;
posted @ 2024-04-19 21:43  YuKiCheng  阅读(18)  评论(0)    收藏  举报