047 编程团体赛
分数 20
作者 CHEN, Yue
单位 浙江大学
编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。
现给定所有队员的比赛成绩,请你编写程序找出冠军队。
输入格式:
输入第一行给出一个正整数 N(≤104),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:
队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0 到 100 的整数。输出格式:
在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。
输入样例:
6 3-10 99 11-5 87 102-1 0 102-3 100 11-9 89 3-2 61输出样例:
11 176
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main() {
int n;
cin >> n;
map<int, int> arr;
for (int i = 0; i < n; i++) {
int a, b, c;
scanf("%d-%d %d", &a, &b, &c);
arr[a] += c;
}
int m1=0, m2=0;
for (auto& i : arr) {
if (m2 < i.second) {
m2 = i.second;
m1 = i.first;
}
}
cout << m1 << " " << m2 << endl;
return 0;
}
1048 数字加密
分数 20
作者 CHEN, Yue
单位 浙江大学
本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
输入格式:
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:
1234567 368782971输出样例:
3695Q8118
#include<iostream>
#include<string>
using namespace std;
int main() {
string a, b, s="";
cin >> a >> b;
int t1 = a.size()-1;
int t2 = b.size() - 1;
int c = 0;
while (t1 >= 0 || t2 >= 0) {
int t = 0;
c += 1;
if (c % 2 != 0) {
if (t1 >= 0) {
t += a[t1] - '0';
}
if (t2 >= 0) {
t += b[t2] - '0';
}
int r = t % 13;
if (r == 10) {
s = 'J' + s;
}
else if (r == 11) {
s = 'Q' + s;
}
else if (r == 12) {
s = 'K' + s;
}
else {
s = to_string(t % 13) + s;
}
}
else {
t = 0;
if (t2 >= 0) {
t += b[t2]-'0';
}
if (t1 >= 0) {
t -= a[t1]-'0';
}
if (t < 0) {
t += 10;
}
s = to_string(t) + s;
}
t1--;
t2--;
}
cout << s << endl;
return 0;
}
1049 数列的片段和
分数 20
作者 CAO, Peng
单位 Google
给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我们有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这 10 个片段。
给定正整数数列,求出全部片段包含的所有的数之和。如本例中 10 个片段总和是 0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0。
输入格式:
输入第一行给出一个不超过 105 的正整数 N,表示数列中数的个数,第二行给出 N 个不超过 1.0 的正数,是数列中的数,其间以一个空格分隔。
输出格式:
在一行中输出该序列所有片段包含的数之和,精确到小数点后 2 位。
输入样例:
4 0.1 0.2 0.3 0.4输出样例:
5.00
#include<iostream>
#include<cmath>
#include<vector>
#include<iomanip>
using namespace std;
int main() {
int n;
cin >> n;
vector<double> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
long long s = 0;
/*for (int i = 0; i < n; i++) {
for (int j = i; j <n; j++) {
for (int k = i; k <= j; k++) {
s += arr[k];
}
}
}*/
/*for (int i = 0; i < n; i++) {
double t = arr[i];
s += t;
for (int j = i+1; j < n; j++) {
t += arr[j];
s += t;
}
} */
//double有精度问题化为长整型
for (int i = 0; i < n; i++) {
s += (long long)((arr[i] * 1000)*(i + 1) * (n - i));
}
cout << fixed << setprecision(2) << s/1000.0 << endl;
return 0;
}
961

被折叠的 条评论
为什么被折叠?



