全部评论 1

  • #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main(){
    	int g, p, k;										// g 竞赛次数, p 竞赛人数, k 积分规则数 
    	while (cin >> g >> p, g + p) {						// 先输入 g, p, 循环能否继续根据 g + p 的值 
    		int ends[110][110];								// ends[i] 表示第 i 名的是哪个选手 
    		for (int i = 1; i <= g; i++) {					// 每场竞赛 p 名选手冲向终点的先后顺序 
    			for (int j = 1; j <= p; j++) {
    				int race;
    				cin >> race;
    				ends[i][race] = j;						// 设置这场竞赛第 race 是第几个车手 
    			}
    		}
    		cin >> k;										// k 个积分规则 
    		while (k--) {									// 循环做 k 次积分规则下的冠军 
    			int points[110]{}, stds[110], m;			// 1~100 车手的积分,积分规则,前 m 名才有
    			cin >> m;
    			for (int i = 1; i <= m; i++) {
    				cin >> stds[i];							// 输入到积分规则标准里头 
    			}
    			int MX = 0;									// 最高积分 
    			for (int i = 1; i <= g; i++) {				// 总共进行了 k 场,所有车手的积分累加到 points 数组中 
    				for (int j = 1; j <= m; j++) {			// 只有前 m 名才有分数 
    					points[ends[i][j]] += stds[j];		// 获得第几名,得到第几名的分值 
    				}
    			}
    			for (int i = 1; i <= p; i++) {
    				MX = max(MX, points[i]);				// 获取最大积分值 
    			}
    			int ot = 0;
    			for (int i = 1; i <= p; i++) {				// 把每个车手的积分判断,如果和 MX 相同 
    				if (points[i] == MX) {					// 输出车手编号 
    					if (ot++ == 0) cout << i;
    					else cout << " " << i;
    				}
    			} 
    			cout << "\n";
    		}
    	} 
    	return 0;
    }
    

    2024-07-27 来自 浙江

    0

热门讨论