牛客周赛 Round 3

游游的7的倍数

思路分析

添加一个数让其为7的倍数。倍数,每7个中必有一个是7的倍数,在末尾添加一个数即可.遍历0-6,满足既可。

时间复杂度

O(1)

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main()
{
    ll x;
    cin>>x;
    x=x*10;
    for(int i=0;i<=6;i++)
    {
        if((x+i)%7==0)
        { cout<<x+i<<endl;
            return 0;}
    }
    return 0;
}

游游的字母串

题目大意

游游有一个仅包含小写字母的字符串。她想知道,最少需要多少次操作才能使得所有字母都变成相同的字母。每一次操作,她可以将某个字母变成其相邻的字母(按照小写字母环的规则进行变化)。

思路分析

因为字符串长度范围较小所以可以直接遍历所有可能字母。对于每个可能的目标字母,遍历字符串中的每个字母,并累加将该字母变成目标字母所需的最小操作次数。在累加过程中,我们需要考虑两种情况:字母间的顺时针操作和逆时针操作。然后比较不同目标字母下的最小操作次数,取其中的最小值作为最终结果。

时间复杂度

O(n)

假设字符串的长度为n,最外层的循环遍历了26个字母(常数级),内层的循环遍历了字符串的每个字符,时间复杂度为O(n)。因此,总的时间复杂度为O(26n),即O(n)。

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int ;
void solve()
{
  string s;
    cin>>s;
    int n=s.length();
    int res=n*26;
    for(int i='a';i<='z';i++)
    {
        int ans=0;
        for(int j=0;j<n;j++)
        {
            ans+=min(abs(s[j]-i),26-abs(s[j]-i));
        }
        res=min(res,ans);
    }
    cout<<res<<endl;
    return;
}
signed main()
{
    solve();
     return 0;
}

游游的水果大礼包

题目大意

游游有n个苹果和m个桃子,可以用2个苹果和1个桃子组成价值a元的一号大礼包,也可以用1个苹果和2个桃子组成价值b元的二号大礼包。要求求出能组成的最大价值总和。

思路分析

枚举一号大礼包的所有情况,按剩下的计算二号大礼包。

时间复杂度

O(min(n/2, m))

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
    int n,m,a,b;
    cin>>n>>m>>a>>b;
    int num=min(n/2,m);
    int ans=0;
    for(int i=0;i<=num;i++){
      int res=i*a;
    res+=min(n-2*i,m-i>>1)*b;
        ans=max(ans,res);
    }
    cout<<ans<<endl;
    return 0;
}

游游的矩阵权值

题目大意

题目要求构造一个nxn的矩阵,矩阵中的元素为1到n^2且每个数恰好出现一次。并且希望使得矩阵的权值尽可能大,其中权值定义为矩阵中每一对相邻元素之和的总和。

思路分析

观察位置发现四个角要加两次,外面四边要加三次,里面元素要加四次。所以要使矩阵权值最大,值越大往里放。(边计算边取模)

  • 四个角:1,2,3,4,权值相加和为10*2
  • 四条边+四个角权值和为3*(4n-4+1)%mod(2*n-2)-10
  • 里面元素:((n-2)(n-2))%mod 2%mod*(2nn%mod-num+1)%mod

时间复杂度

代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
#define int long long 
signed main (){
    int n;
    cin>>n;
     int ans=3*(4*n-4+1)%mod*(2*n-2)-10;
     ans%=mod;
     ans=(ans+mod)%mod;
     int num=(n*n+4-4*n)%mod;//

    ans=(ans+num%mod*2%mod*(2*n*n%mod-num+1)%mod)%mod;   
    ans=(ans+mod)%mod;
    cout<<ans<<endl;
    return 0;
}
相关推荐
晚风醉蝶1 分钟前
第零篇-算法全景图
算法
疯狂打码的少年31 分钟前
【数据结构】树的基本概念与二叉树定义
java·数据结构·笔记·算法
webmote3331 分钟前
用 NVIDIA Nemotron 3 Super + .NET 构建有记忆的多轮对话
后端·算法
Keven_1137 分钟前
算法札记:区分稀疏图与稠密图在经验上的数学计算差异
算法·稠密图·稀疏图
Sagittarius_A*1 小时前
后量子密码|前置基础 03|数字签名运行逻辑:签名签发、核验原理与实际业务应用
算法·信息安全·密码学·数字签名·后量子密码
DBA小马哥2 小时前
向量数据库入门到进阶:Embedding、ANN算法与RAG落地的关键术语
数据库·算法·embedding
Luhui Dev2 小时前
如何在 WorkBuddy 中使用大角几何:从 MCP 接入到 AI 几何作图
人工智能·数学·算法·agent·luhuidev
Smilecoc2 小时前
决策树(五):决策树回归
算法·决策树·回归
小龙报2 小时前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯
Hi李耶3 小时前
【LeetCode】15.三数之和
java·算法·leetcode