这一场比较偏思维趴,没考什么算法,只要想到了就能写
目录
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;
}