VJ比赛题解及个人感想

首先说一下我的个人感想吧,首先这次比赛是团队形式(3人)的,所以更注重和队友的沟通与配合,我们组的情况是1个人敲代码,1个人先找一些比较简单的题,1个人分析题意。分析题意的人把题目用简短的语言概括出来 发到群里,然后敲代码的人构建思路和具体实行。当然这样的分工不是一成不变的,我们每个人的任务也会根据情况改变,对于一些比较难解释题意的题,分析题意的人也可以直接写代码,从而保证时间和效率。
还有就是从这次比赛中我又一次深刻的认识到了英语的重大作用,英文题目是硬伤,很多题目都读不太明白,这导致我们前期做完几个题后,后期基本都读不懂剩下题的题意,严重影响了ac的题数;
还有就是认真审题吧,这次题目需要用文件输入输出,刚开始我没有看到这一点,wa了三四次(罚时太可怕了),后来才发现问题。
这次我们组a了4个题,其中C题是我做的,L题我和一个队友一起做的,他比我交的早然后a了,我做完之后也尝试的交了一下,也a了,所以我也把L题的代码和思路贴一下。

题目C
题意分析:让你输入两个单词,然后取第一个单词的非空前缀,第二个单词的非空后缀,并将它们连接起来。 问能组成多少个不同的单词。
思路:让数组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;
}

------------------------------------------分割线----------------------------------------------

题目L
题意分析:给出一些数让你判断满足在上下左右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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值