牛客周赛 Round 3

文章提供了四道编程题目,涉及数字处理和字符串操作,要求在给定条件下找到最优解决方案。例如,A题要求将数变为7的倍数,B题涉及字母串的转换,C题是关于水果大礼包的价值最大化,D题则关于矩阵权值的最大化。每道题都给出了示例输入和输出,以及解题思路。
摘要由CSDN通过智能技术生成

这一场比较偏思维趴,没考什么算法,只要想到了就能写 

目录

A-游游的7的倍数_牛客周赛 Round 3 (nowcoder.com)

题目描述

输入描述:

输出描述:

输入

输出

说明

输入

输出

说明

B-游游的字母串_牛客周赛 Round 3 (nowcoder.com) 

题目描述

输入描述:

输出描述:

输入

输出

说明

C-游游的水果大礼包_牛客周赛 Round 3 (nowcoder.com) 

题目描述

输入描述:

输出描述:

输入

输出

说明

输入

输出

说明

D-游游的矩阵权值_牛客周赛 Round 3 (nowcoder.com) 

题目描述

输入描述:

输出描述:

输入

输出

输入

输出


A-游游的7的倍数_牛客周赛 Round 3 (nowcoder.com)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

游游拿到了一个正整数 xxx,她希望在 xxx 中添加一个数字,使它成为 7 的倍数。你能帮帮她吗?

输入描述:

一个正整数 xxx。
1≤x≤1091\leq x \leq 10^91≤x≤109

输出描述:

xxx添加一个数字后形成的数。请务必保证操作的合法性,且一定是7的倍数。如果有多解,输出任意一个合法解。可以证明,至少存在一个正确答案。

示例1

输入

复制1

1

输出

复制21

21

说明

在前面添加一个2即可。

示例2

输入

复制15

15

输出

复制105

105

说明

在1和2的中间添加一个0。105=15*7,合法。另外,315、154等答案也是合法的。

 

直接在个数上加一个数即可,但是要防止和给出的数相等的情况

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    string s;
    cin>>s;
    for(int i=0;i<10;i++){
        string p=s+to_string(i);
        ll q=stol(p);
        if(q%7==0&&q!=stol(s)){
            cout<<q;
            break;
        }
    }
    return 0;
}

B-游游的字母串_牛客周赛 Round 3 (nowcoder.com) 

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

对于一个小写字母而言,游游可以通过一次操作把这个字母变成相邻的字母。'a'和'b'相邻,'b'和'c'相邻,以此类推。特殊的,'a'和'z'也是相邻的。可以认为,小写字母的相邻规则为一个环。

游游拿到了一个仅包含小写字母的字符串,她想知道,使得所有字母都相等至少要多少次操作?

输入描述:

 
 

一个仅包含小写字母,长度不超过100000的字符串。

输出描述:

 
 

一个整数,代表最小的操作次数。

示例1

输入

复制yab

yab

输出

复制3

3

说明

 
 

第一次操作,把'y'变成'z',字符串变成了"zab"

第二次操作,把'b'变成'a',字符串变成了"zaa"

第三次操作,把'z'变成'a',字符串变成了"aaa"

 

枚举答案a~z,记录最小的操作数即为答案

#include<bits/stdc++.h>
using namespace std;

int main(){
    string s;
    cin>>s;
    int cnt=1e9;
    for(char i='a';i<='z';i++){
        int sum=0;
        for(int j=0;j<s.size();j++){
            sum+=min(abs(s[j]-i),26-abs(s[j]-i));//从左去或从右去
        }
        cnt=min(cnt,sum);
    }
    cout<<cnt;
    return 0;
}

C-游游的水果大礼包_牛客周赛 Round 3 (nowcoder.com) 

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

游游有nnn个苹果,mmm个桃子。她可以把2个苹果和1个桃子组成价值aaa元的一号水果大礼包,也可以把1个苹果和2个桃子组成价值bbb元的二号水果大礼包。游游想知道,自己最多能组成多少价值总和的大礼包?

输入描述:

四个正整数n,m,a,bn,m,a,bn,m,a,b,用空格隔开。分别代表苹果的数量、桃子的数量、一号大礼包价值、二号大礼包价值。
1≤n,m,a,b≤1061\leq n,m,a,b\leq 10^61≤n,m,a,b≤106

输出描述:

一个整数,代表大礼包的最大价值总和。

示例1

输入

复制3 4 1 2

3 4 1 2

输出

复制4

4

说明

 
 

组成两个二号水果大礼包,使用了2个苹果和4个桃子。总价值为4。

示例2

输入

复制1 1 5 6

1 1 5 6

输出

复制0

0

说明

 
 

显然无法组合成任意一个大礼包

 

枚举其中一个的组合数,剩下的可合成的数即是另一个组合数,记录最大的答案即可

#include<bits/stdc++.h>
using namespace std;
int n,m,a,b;
int main(){
    cin>>n>>m>>a>>b;
    long cnt=0;
    for(int i=0;i<=m;i++){//i表示可以a组合的个数
        long sum=0;
        if(2*i<=n){//首先要可以组合
            sum+=i*a;
            long x=n-2*i,y=m-i;//剩下的是b组合的个数
            sum+=min(x,y/2)*b;
            cnt=max(cnt,sum);
        }
    }
    cout<<cnt;
    return 0;
}

D-游游的矩阵权值_牛客周赛 Round 3 (nowcoder.com) 

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

游游定义一个矩阵权值为:每一对相邻元素之和的总和。
例如,对于矩阵:
1 2
3 4
它的权值是(1+2)+(1+3)+(2+4)+(3+4)=3+4+6+7=20。
游游希望你构造一个n∗nn*nn∗n的矩阵,矩阵中的元素为1到n2n^2n2且每个数恰好出现一次。她希望最终矩阵的权值尽可能大。你能帮帮她吗?由于矩阵可能过大,你不需要输出最终的矩阵,只需要输出这个最大权值即可。答案对109+710^9+7109+7取模。

输入描述:

一个正整数nnn。
2≤n≤1092\leq n \leq 10^92≤n≤109

输出描述:

矩阵的最大权值,对109+710^9+7109+7取模。

示例1

输入

复制2

2

输出

复制20

20

示例2

输入

复制3

3

输出

复制134

134

首先是矩阵的四个角只加了两次,四边上的其他点只加了三次,中间的都加了四次

所以四个角放的肯定是1~4四个数

四边上的其他点放的肯定是5~4n-4

中间的是4n-3到n*n

 所以:答案=2*四个角+3*四边其他点+4*中间

最大的坑点就是取余了,我直接在每个地方都取模

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n;
const int mod=1e9+7;
int main(){
    cin>>n;
    ll sibian=((((n*n%mod*8%mod)-(14*n%mod)+mod)%mod-4+mod)%mod)*3+20%mod;
    ll zhongjian=((4*n-3)%mod*(n*n%mod-(4*n-4)%mod+mod)%mod*4%mod+(n*n%mod-(4*n-4)%mod+mod)%mod*(n*n%mod-(4*n-4)%mod-1+mod)%mod*2%mod)%mod;
    ll sum=(sibian+zhongjian)%mod;
    cout<<sum;
    return 0;
}

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值