- 1. 评委打分
【问题描述】
校园卡拉OK比赛设置了7名评委,当一名选手K完歌之后,主持人报出歌手名字后,7位评委同时亮分,按照惯例,去掉一个最高分和一个最低分后,其余5位评委评分总和为该选手的最终得分。
一共有n组选手参加比赛,请你编写一个程序,当所有比赛结束后,列出所有选手的排名以及最终得分情况。
假定不会出现总分相同的情况(总分相同时,以出场顺序优先排名还是?以后再说吧! 呵呵,暂时不管
【输入形式】
第1行为一个正整数n,表示参赛人数。随后n行,每行开始为选手的名字,随后7个正整数表示评委亮分情况,数据间以空格分隔。
【输出形式】
按名次升序输出所有选手的名字以及总分,总共n行。
【样例输入】
4 Alice 90 90 85 92 90 90 90 Bob 92 99 88 92 92 92 92 Cindy 80 85 94 94 94 94 94 Dony 95 95 100 90 95 95 95
【样例输出】
Dony 475 Cindy 461 Bob 460 Alice 450
解答:
#include<bits/stdc++.h>
using namespace std;
struct m {string s;int sc[7];int max=0,min=101,sum=0;}m2[100];
bool cmp(m a,m b) {return (a.sum>b.sum) ;}
int main() {int k;cin>>k;for(int i=0;i<k;i++) {cin>>m2[i].s;for (int j = 0; j < 7; j++) {cin>>m2[i].sc[j];m2[i].sum+=m2[i].sc[j];if (m2[i].sc[j]>m2[i].max) m2[i].max=m2[i].sc[j];if (m2[i].sc[j]<m2[i].min) m2[i].min=m2[i].sc[j];}m2[i].sum=m2[i].sum-m2[i].max-m2[i].min;}sort(m2,m2+k,cmp);for(int i=0;i<k;i++)cout<<m2[i].s<<" "<<m2[i].sum<<endl;}
- 2. 招聘
【问题描述】
某公司需要招聘一批员工,该公司有自己独特的评价体系,对应聘者设立了 3 个指标:技能值 Ki、智慧值 Ii 和忠诚度 Ei ,i=1, 2, ...
经过严格的初选和复选以及各项测试以后,有 N 个人进入最后的名单,公司给出了每个人的各项指标值,并规定对于某人 i,如果存在另外人 j,有Ki < Kj 、Ii < Ij 、Ei < Ej ,则 i 将会被淘汰。
请找出总共有多少人会被淘汰。
【输入形式】
第一行包含一个整数 N (1≤ N ≤ 500000),表示最终进入评价名单的人数。第二行包括 N 个整数 Ki,第三行包含 N 个整数 Ii,第四行包含 N 个整数 Ei ,0 ≤ Ki、Ii 、 Ei ≤ 109。
【输出形式】
输出为一行一个整数。
【样例输入】
3 1 4 2 4 3 2 2 5 3
【样例输出】
1
代码
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;struct Person {int K;int I;int E;
};int main() {int N;cin >> N;vector<Person> people(N);for (int i = 0; i < N; ++i) {cin >> people[i].K;}for (int i = 0; i < N; ++i) {cin >> people[i].I;}for (int i = 0; i < N; ++i) {cin >> people[i].E;}int eliminated = 0;for (int i = 0; i < N; ++i) {for (int j = 0; j < N; ++j) {if (i != j && people[i].K < people[j].K && people[i].I < people[j].I && people[i].E < people[j].E) {eliminated++;break; // 当前 i 已经被淘汰,不需要再比较了}}}cout << eliminated << endl;return 0;
}
- 3. 选举
【问题描述】
在一场全国性选举中,有n位候选人,编号从1~n,这个国家有m个城市,已知每个城市每个候选人的得票数。
这个国家的选举制度很不寻常。在选举的第一阶段,每个城市的票数被计算出来,在每个城市,获胜者为得票最多的候选人,如果有相同得票数,则编号最小的获胜。
在第二个阶段,比较赢得的城市数,赢得的城市最多者获胜,如果赢得的城市数相等,则编号小者获胜。
请确定最终谁将获得选举胜利。
【输入形式】
输入的第一行为两个正整数n和m (1 ≤ n, m ≤ 100),表示候选人的个数和城市的个数。
接下来的m行,每行包含n个非负整数,第i行的第j个数aij(1 ≤ j ≤ n, 1 ≤ i ≤ m, 0 ≤ aij ≤ 109) 表示第j个候选人在第i个城市的得票数。
【输出形式】
输出为一个数,最终获胜者的编号。
【样例输入】
3 3 1 2 3 2 3 1 1 2 1
【样例输出】
2
代码
#include <iostream>
#include <vector>using namespace std;struct Candidate {int id;int totalVotes;int cityWins;
};int main() {int n, m;cin >> n >> m;vector<vector<int>> votes(m, vector<int>(n));vector<Candidate> candidates(n);for (int i = 0; i < n; ++i) {candidates[i].id = i + 1; // 编号从1开始candidates[i].totalVotes = 0;candidates[i].cityWins = 0;}for (int i = 0; i < m; ++i) {for (int j = 0; j < n; ++j) {cin >> votes[i][j];candidates[j].totalVotes += votes[i][j];}}for (int i = 0; i < m; ++i) {int maxVotes = -1;int winner = -1;for (int j = 0; j < n; ++j) {if (votes[i][j] > maxVotes || (votes[i][j] == maxVotes && j < winner)) {maxVotes = votes[i][j];winner = j;}}candidates[winner].cityWins++;}int finalWinner = 0;for (int i = 1; i < n; ++i) {if (candidates[i].cityWins > candidates[finalWinner].cityWins ||(candidates[i].cityWins == candidates[finalWinner].cityWins && candidates[i].id < candidates[finalWinner].id)) {finalWinner = i;}}cout << candidates[finalWinner].id << endl;return 0;
}
- 4. 看电影
【问题描述】
湖南大学正在举办一场重要的国际学术会议,出席会议的 n 位科学家来自不同的国家,每位科学家都只熟悉一种语言,为方便起见,世界上所有的语言用1~1000的数字编号来列出。
晚上,主办方安排所有科学家去看电影,电影院里有 m 部电影,每部电影可以用两个不同的整数来描述,即音频语言和字幕语言的编号。看电影的科学家,如果他熟悉电影的音频语言,他会非常高兴,如果他熟悉字幕的语言,他基本上满意,如果他两种都不熟悉,他会感到不满意(请注意,每部电影的音频语言和字幕语言总是不同的)。
科学家们决定一起去看同一部电影。你必须帮助他们选择电影,使得非常高兴的科学家的数量是最大的,如果有多部这样的电影,在其中选择能使基本满意的科学家的数量最大,如果还有多部,则全部输出。如果没有这样的电影,则输出"unsatisfied"。
【输入形式】
输入的第一行为一个正整数 n (1 ≤ n ≤ 200000) ,表示科学家的数量。
第二行为 n 个正整数a1、a2、...、an (1 ≤ ai ≤ 1000),其中ai 表示第 i 位科学家熟悉的语言编号。
第三行包含一个正整数m(1 ≤ m ≤ 200000),表示电影院里的电影数量,编号从1~m。
第四行包含 m 个正整数 b1, b2, ..., bm (1 ≤ bj ≤ 1000),其中 bj 表示第 j 部电影的音频语言。
第五行包含 m 个正整数 c1, c2, ..., cm (1 ≤ cj ≤ 1000),其中 cj 表示第 j 部电影的字幕语言。
输入保证 bj ≠ cj 。
【输出形式】
输出为若干整数,从小到大,表示科学家们可以去选择去看的电影的编号。如果没有这样的电影,则输出"unsatisfied"。
【样例输入】
3 2 3 2 2 3 2 2 3
【样例输出】
2
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;struct Scientist {int id;int language;
};struct Movie {int id;int audioLanguage;int subtitlesLanguage;int happyScientists;int satisfiedScientists;
};bool compareMovies(const Movie &a, const Movie &b) {if (a.happyScientists != b.happyScientists) {return a.happyScientists > b.happyScientists;} else if (a.satisfiedScientists != b.satisfiedScientists) {return a.satisfiedScientists > b.satisfiedScientists;} else {return a.id < b.id; // 保证编号小的在前面}
}int main() {int n;cin >> n;vector<Scientist> scientists(n);for (int i = 0; i < n; ++i) {scientists[i].id = i + 1;cin >> scientists[i].language;}int m;cin >> m;vector<Movie> movies(m);for (int i = 0; i < m; ++i) {movies[i].id = i + 1;cin >> movies[i].audioLanguage;}for (int i = 0; i < m; ++i) {cin >> movies[i].subtitlesLanguage;movies[i].happyScientists = 0;movies[i].satisfiedScientists = 0;}for (const Scientist &scientist : scientists) {for (Movie &movie : movies) {if (scientist.language == movie.audioLanguage) {movie.happyScientists++;}if (scientist.language == movie.subtitlesLanguage) {movie.satisfiedScientists++;}}}sort(movies.begin(), movies.end(), compareMovies);if (movies[0].happyScientists == 0) {cout << "unsatisfied" << endl;} else {for (const Movie &movie : movies) {if (movie.happyScientists == movies[0].happyScientists && movie.satisfiedScientists == movies[0].satisfiedScientists) {cout << movie.id << " ";}}cout << endl;}return 0;
}