A题
A:
题目难度并不大,只不过挖了一个坑,在题目示范例子中,只提及了1*1和2 * 2的正方形,但是错过一次后发现这个题目要求可以3 * 3 及以上(只要能够保存进)
以下是代码
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int cnt = 0, i, k, a, b;
cin >> a >> b;
cnt += a * b;
int l = min(a, b);
int j = max(a, b);
for (i = 2; i <= l; i++) {
cnt += (j - i + 1) * (l - i + 1);
}
cout << cnt;
return 0;
}
- B:
map(水
#include <iostream>
#include <algorithm>
#include <map>
#include <string>
using namespace std;
map<string, int> mp;
int main() {
string a;
int n, m;
cin >> n;
int i, j, k;
for (i = 0; i < n; i++) {
cin >> a;
mp[a] = 1;
}
cin >> m;
string b[10010];
for (int i = 0; i < m; i++) {
cin >> b[i];
}
for (int i = 0; i < m; i++) {
if (mp[b[i]]) cout << b[i] << endl;
}
}
- C:
题目难度并不大,直接sort结构体排序就可,只不过在输入输出的时候需要注意,输入我关掉了同步,输出不用endl,用"\n"就可以,否则正常会超时(折磨人啊, 改了三次才改过来!
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
struct name{
int ch, eng, math, all;
int sum;
int list;
} a[100010];
bool cmp(name a, name b) {
if (a.sum == b.sum) {
if (a.math == b.math) {
if (a.all == b.all) {
if (a.ch == b.ch) {
return a.list < b.list;
} else {
return a.ch > b.ch;
}
} else {
return a.all > b.all;
}
} else {
return a.math > b.math;
}
} else {
return a.sum > b.sum;
}
}
int main() {
int n, num1, num2;
ios::sync_with_stdio(false);
cin >> n >> num1 >> num2;
int i, j, k;
for (i = 1; i <= n; i++) {
a[i].list = i;
cin >> a[i].ch >> a[i].math >> a[i].eng >> a[i].all;
a[i].sum = a[i].ch + a[i].math + a[i].eng + a[i].all;
}
for (i = 1; i <= n; i++) {
cout << a[i].sum << "\n";
}
sort(a + 1, a + n + 1, cmp);
for (i = num1; i <= num2; i++) {
cout << a[i].list << ' ' << a[i].sum << "\n";
}
return 0;
}
- D题
题目思路很有意思:不需要排序就可以解决,我们只需要思考,a[i]如果比a[i - 1]高,那么我们需要刷漆的次数一定是需要增加的,如果比它小,我们就可以不考虑,之前的刷漆一定会刷到。
也就是说我们只需要考虑a[i]与a[i - 1]之间的关系。
代码贴贴:
#include <iostream>
using namespace std;
int main() {
int a[100010];
int n, i, j;
int sum = 0;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
if (!i) {
sum += a[i];
} else {
if (a[i] > a[i - 1]) {
sum += a[i] - a[i - 1];
}
}
}
cout << sum << endl;
return 0;
}
E题:
这题多水一眼就能看出来,不过记得long long
代码:
#include <iostream>
using namespace std;
int main() {
int a, b, c, k, n, i;
long long sum = 0;
cin >> n;
for (i = 1; i <= n; i++) {
cin >> k;
if (k == 1) {
cin >> a >> b;
sum += (a + b) * 2;
}
if (k == 2) {
cin >> a;
sum += a * 4;
}
if (k == 3) {
cin >> a >> b >> c;
sum += a + b + c;
}
}
cout << sum;
return 0;
}
F题:
能力有限,实在做不出来!
附上大佬博客,可以自行研究,我先run了带佬博客
先写这些,能力有限,很菜勿喷,写博客就是为了提高自己分享思路。