5.6 拼多多笔试

第一题:增加数字使各不相同。排序后暴力加。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
#define MAXN 100500
ll a[MAXN];
int n,m;
ll ans;
int main()
{
    scanf("%d",&n);
    for(int i = 0 ; i < n ; i++)
        scanf("%lld", &a[i]);
    sort(a, a+n);
    ans = 0;
    for(int i = 1 ; i < n ; i++){
        if(a[i] <= a[i-1]){
            ans += 1LL * (a[i-1] - a[i] + 1);
            a[i] = a[i-1] + 1;
        }
    }
    printf("%lld\n",ans);
    return 0;
}
第二题:木棍围成正方形。dfs搜索
#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
#define MAXN 1005
int a[MAXN];
bool vis[MAXN];
int n,m;
int ans, sum;
void dfs(int s, int l, int num){
    if(num == 4){
        ans = 1;
        return ;
    }
    if(l == sum)
        dfs(0, 0, num+1);
    for(int i = s ; ans == 0 && i < n ; i++){
        if(vis[i] || l + a[i] > sum)
            continue;
        vis[i] = true;
        dfs(i+1, l + a[i], num);
        vis[i] = false;
    }
    return;
}
int main()
{
    int tt,ca = 1;
    scanf("%d",&tt);
    while(tt--){
        scanf("%d", &n);
        sum = 0;
        ans = 0;
        for(int i = 0 ; i < n ; i++){
            scanf("%d", &a[i]);
            sum += a[i];
        }
        sort(a, a+n);
        if(sum % 4 != 0 || a[n-1] > sum / 4){
            printf("NO\n");
            continue;
        }
        sum /= 4;
        memset(vis, 0, sizeof(vis));
        dfs(0, 0, 0);
        if(ans == 1)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}
第三题:斐波那契数列。矩阵快速幂,3取模
#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
#define MAXN 1005
int n = 2;
struct mat
{
    int at[5][5];
};
mat mul(mat a,mat b)
{
    mat ret;
    memset(ret.at,0,sizeof(ret.at));
    for(int i=0;i<n;i++)
    {
        for(int k=0;k<n;k++)
        {
            if(a.at[i][k])
            {
                for(int j=0;j<n;j++)
                {
                    ret.at[i][j]+=a.at[i][k]*b.at[k][j];
                    ret.at[i][j] %= 3;
                }
            }
        }
    }
    return ret;
}
mat expo(mat a,int k)
{
    mat e;
    memset(e.at,0,sizeof(e.at));
    for(int i=0;i<n;i++)  e.at[i][i]=1;
    while(k)
    {
        if(k&1)
            e=mul(a,e);
        a=mul(a,a);
        k>>=1;
    }
    return e ;
}
int main()
{
    int tt,ca = 1;
    int k,p,q;
    scanf("%d",&tt);
    mat I;
    I.at[0][0] = 0;
    I.at[0][1] = 1;
    I.at[1][0] = 1;
    I.at[1][1] = 1;
    while(tt--){
        scanf("%d %d %d", &p, &q, &k);
        p %= 3;
        q %= 3;
        mat t = expo(I, k - 1);
        int ans = t.at[1][0] * p + t.at[1][1] * q;
        if(ans  % 3 == 0)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}
第四题:连续n个数,使得gcd*个数最大。数字变多,gcd非递增。每次保留gcd相同时最远的下标。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
#define MAXN 100500
int a[MAXN];
vector<pair<int, int>> b[MAXN];
int n,m;
int ans;
int gcd(int a, int b){
    if(b == 0) return a;
    return gcd(b, a%b);
}
int main()
{
    scanf("%d",&n);
    ll ans = 0;
    for(int i = 0 ; i < n ; i++){
        scanf("%d", &a[i]);
        ans = max(ans, 1LL * a[i]);
    }
    b[0].push_back(make_pair(a[0], 0));
    for(int i = 1 ; i < n ; i++){
        int last = -1;
        for(int j = 0 ; j < b[i-1].size() ; j++){
            int t = gcd(b[i-1][j].first, a[i]);
            int id = b[i-1][j].second;
            if(t == last)
                continue;
            last = t;
            b[i].push_back(make_pair(t, id));
            ans = max(ans, 1LL * t * (i-id + 1));
        }
        b[i].push_back(make_pair(a[i], i));
    }
    printf("%lld\n",ans);
    return 0;
}


#拼多多春招笔试##拼多多##笔试题目#
全部评论
草,第一题没用long long
点赞 回复 分享
发布于 2020-05-07 13:20
都能ac吗
点赞 回复 分享
发布于 2020-05-08 10:24
第二题要是边长是3 3 3 3 4呢
点赞 回复 分享
发布于 2020-05-08 11:18

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
1 15 评论
分享
牛客网
牛客企业服务