首先说一下我的个人感想吧,首先这次比赛是团队形式(3人)的,所以更注重和队友的沟通与配合,我们组的情况是1个人敲代码,1个人先找一些比较简单的题,1个人分析题意。分析题意的人把题目用简短的语言概括出来 发到群里,然后敲代码的人构建思路和具体实行。当然这样的分工不是一成不变的,我们每个人的任务也会根据情况改变,对于一些比较难解释题意的题,分析题意的人也可以直接写代码,从而保证时间和效率。
还有就是从这次比赛中我又一次深刻的认识到了英语的重大作用,英文题目是硬伤,很多题目都读不太明白,这导致我们前期做完几个题后,后期基本都读不懂剩下题的题意,严重影响了ac的题数;
还有就是认真审题吧,这次题目需要用文件输入输出,刚开始我没有看到这一点,wa了三四次(罚时太可怕了),后来才发现问题。
这次我们组a了4个题,其中C题是我做的,L题我和一个队友一起做的,他比我交的早然后a了,我做完之后也尝试的交了一下,也a了,所以我也把L题的代码和思路贴一下。
题意分析:让你输入两个单词,然后取第一个单词的非空前缀,第二个单词的非空后缀,并将它们连接起来。 问能组成多少个不同的单词。
思路:让数组a和数组b的长度相乘然后减去a中a和b相同的字母的个数。
ac代码
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char const *argv[]) {
freopen("concatenation.in", "r", stdin);//注意文件的输入输出
freopen("concatenation.out", "w", stdout);
char str1[100010], str2[100010];
int len1, len2, ans[150], i;
long long int result;
scanf("%s", str1);
scanf("%s", str2);
memset(ans, 0, sizeof(ans));
len1 = strlen(str1);
len2 = strlen(str2);
result = (long long int)len1 * (long long int)len2;
for (i = 1; i < len1; i++) ans[(int)str1[i]]++;
for (i = 0; i < len2 - 1; i++) result = result - ans[(int)str2[i]];
printf("%lld\n", result);
return 0;
}
------------------------------------------分割线----------------------------------------------
题意分析:给出一些数让你判断满足在上下左右4个方向上是最大数的个数,就这个样例而言 首先是(1,1)也就是5这个数字,5的上边和左边没有数字,所以在上和左这两个方向是满足条件的(是最大的),所以是2,同时5这个数字是下方1和4中最大的,所有下方也满足条件即2+1,但是右边不满足条件因为9和10都比5大,所以就5这个数字而言满足条件的个数是3,其他数字同理可得。
思路:由于题目数据行和列都是<=100的 所以直接暴力就行,这里可以用加法和减法两种解法,加法的话就是从0开始,找到一个满足条件的就+1;减法的话就是先算出总个数,即数字个数*4(上下左右4个方向),然后找到一个不满足条件的就-1。
ac代码
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char const *argv[]) {
freopen("lucky.in", "r", stdin);//文件!!!
freopen("lucky.out", "w", stdout);
int n, m, i, j, sum, k = 0, a[110][110], x, y;
scanf("%d %d", &n, &m);
memset(a, 0, sizeof(a));
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++) scanf("%d", &a[i][j]);
sum = 4 * n * m;//总个数
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++) {
for (y = j - 1; y > 0; y--)
if (a[i][j] <= a[i][y]) {
k++;
break;
}
for (y = j + 1; y <= m; y++)
if (a[i][j] <= a[i][y]) {
k++;
break;
}
for (x = i - 1; x > 0; x--)
if (a[i][j] <= a[x][j]) {
k++;
break;
}
for (x = i + 1; x <= n; x++)
if (a[i][j] <= a[x][j]) {
k++;
break;
}
}
sum = sum - k;
printf("%d\n", sum);
return 0;
}