导图社区 编程题目
这三道题目我都有点疑惑,为什么不符合要求,请大家帮我好好找找,找到有可能不符合要求的地方的时,请大家提醒我。
编辑于2024-08-11 12:25:34编程题
百米赛跑2
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, m; cin >> n >> m; vector<pair<int, double>> tmp(n); for (int i = 0; i < n; ++i) { cin >> tmp[i].second; tmp[i].first = i + 1; } sort(tmp.begin(), tmp.end(), [](const pair<int, double>& a, const pair<int, double>& b) { return a.second < b.second; }); tmp.erase(tmp.begin() + m, tmp.end()); sort(tmp.begin(), tmp.end(), [](const pair<int, double>& a, const pair<int, double>& b) { return a.first < b.first; }); for (const auto& i : tmp) { cout << i.first << " " << i.second } return 0; }
百米赛跑2 题目难度:初阶 时间限制:10000ms 内存限制:512MB 题目描述 小T作为班级的班长,承担着班级的各项事务,今天班主任交给了小T一个重要的任务,学校的运动会就要开始了,要小T帮忙统计百米赛跑的成绩,总共有 n 位同学参加的百米赛跑初赛,由统计员统计出了 n 位同学的成绩,现在只有其中成绩最好的 m 位同学能够进入决赛,现在小T想要知道这次比赛的决赛选手的编号以及他们的成绩,由于这个数字太大了,小T才小学一年级,还算不过来,需要你帮帮他。 输入格式 第一行一个整数 n 表示同学的数量。 第二行一个整数 m 表示进入决赛的同学数量。 接下来 n 行,每行一个数字 ai 表示选手成绩(成绩为计时时长)。 输出格式 共 m 行,每行 2 个数用空格隔开分别表示进入决赛的选手的编号和对应的成绩,按照选手的编号排序,这里的编号按照输入顺序确定,为 1 到 n。 样例数据 样例输入#1 5 3 15.53 14.24 14.33 13.21 14.16 样例输出#1 2 14.24 4 13.21 5 14.16 数据范围 对于 30% 的数据,1≤n≤10。 对于 50% 的数据,1≤n≤1000。 对于 100% 的数据,1≤m≤n≤100000,1≤ai≤100,ai均为2位小数且第二位不为 0,数据保证排在第 m 名的成绩和第 m+1 名的成绩不同。 
应用题
#include <iostream> #include <vector> #include <algorithm> using namespace std; bool compare(const pair<int, pair<int, int>>& a, const pair<int, pair<int, int>>& b) { return a.first < b.first; } int main() { vector<pair<int, pair<int, int>>> count; int n, m; cin >> n >> m; int a = m - n; if (a % 2 == 1 || m < n || m > 5 * n) { cout << -1 << endl; } else { for (int z = a / 2; z >= 0; z--) { int y = (a - 4 * z) / 2; int x = n - y - z; if (x + 3 * y + 5 * z == m && y >= 0 && x >= 0) { count.push_back(make_pair(x, make_pair(y, z))); } } int result = count.size(); sort(count.begin(), count.end(), compare); cout << result << endl; for (const auto& i : count) { cout << i.first << " " << i.second.first << " " << i.second.second << endl; } } return 0; }
应用题 题目难度:中阶 时间限制:1000ms 内存限制:512MB 【题目描述】 小T作为班级的班长,承担着班级的各项事务,今天班主任交给了小T一个重要的任务,学校的知识竞赛就要开始了,要小T代表班级去参加,今天这场是快速解应用题,小明今天去商店购买东西,小明购买的东西有3样,第一件是矿泉水,矿泉水一块钱一瓶,第二件是烤肠,烤肠三块钱一根,第三件是方便面,方便面是五块钱一碗,小明带了m块钱,他一定会花光身上所有的钱去购买这些东西,但是买的方案有很多,小明只有一个要求,那就是三件物品的数量之和要为n,现在小明想知道有多少种可能的购买方案数量,以及这些方案中每件物品究竟是买多少件,裁判会给出n和m要求你尽快给出答案,由于这个问题太难了,小T才小学一年级,还算不过来,需要你帮帮他。 【输入格式】 第一行一个整数n,表示三件物品的数量之和。 第二行一个整数m,表示小明带的钱数。 【输出格式】 第一行一个数字表示总的方案数,接下来若干行,每行表示一种方案,用空格隔开的三个整数分别表示矿泉水、烤肠和方便面的数量,这里先按照矿泉水的数量由小到大输出,如果矿泉水的数量相同,则按烤肠的数量由小到大输出,如果烤肠的数量相同,则按方便面的数量由小到大输出。 如果不存在这样的方案,则第一行输出-1。 【样例输入#1】 3 9 【样例输出#1】 2 0 3 0 1 1 1 【大样例】 down1.in/down1.out 【数据范围】 对于30%的数据,1≤n,m≤100。 对于50%的数据,1≤n,m≤104。 对于100%的数据,1≤n,m≤106。 
分组
n, k, x = map(int, input().split()) a = list(map(int, input().split())) count=[] b=[] for i in range(len(a)-1): if a[i+1]-a[i]>x: count.append(a[i]) count.append(a[i+1]) if len(count)>0: for i in range(len(count)//2): b.append(int(count[i+1]-count[i])/x) b=sorted(b) while k>0 and b: k-=b[0] b.pop(0) print(len(b)+1) else: print(1)
分组 题目难度:中阶 时间限制:1000ms 内存限制:512MB 【题目描述】 小T作为班级的班长,承担着班级的各项事务,今天班主任交给了小T一个重要的任务,学校的音乐会就要开始了,要小T帮忙给参加合唱的同学分组,考虑到合唱的效果,这里要求每个小组满足这个要求:将小组内的成员唱歌水平从小到大排序后,相邻两个成员的唱歌水平之差不能高于 x, 总共有 n 位同学参加合唱,为了能够表演的更加出彩,老师可以额外的邀请 k 名其他同学,这些同学的唱歌水平可以由你来决定,在加入了这些同学之后,老师想知道如果至少能够分成多少组,使得每个小组都满足老师想要的合唱效果,由于这个问题太难了,小T才小学一年级,还算不过来,需要你帮帮他。 【输入格式】 第一行用空格隔开的 3 个整数为 n,k,x,分别表示同学的数量,可以额外邀请的同学数量,和相邻水平之差。 第二行用空格隔开的 n 个数 ai 表示同学唱歌水平。 【输出格式】 第一行一个数字表示最少的分组数量。 【样例输入#1】 8 2 3 1 1 5 8 12 13 20 22 【样例输出#1】 2 【样例解释#1】 你可以邀请 2 位同学水平分别为 2 和 11,这样可以分成 2 个小组 [1,1,2,5,8,11,12,13] [20,22] 【大样例】 down1.in/down1.out 【数据范围】 对于 30% 的数据,k=0。 对于 50% 的数据,1≤n≤103,1≤k,x,ai≤109。 对于 100% 的数据,1≤n≤200000,1≤k,x,ai≤1018。