牛客周赛 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;
}
相关推荐
会员源码网37 分钟前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
木心月转码ing1 小时前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
HelloReader2 小时前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
颜酱5 小时前
二叉树分解问题思路解题模式
javascript·后端·算法
qianpeng8976 小时前
水声匹配场定位原理及实验
算法
董董灿是个攻城狮18 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
AI软著研究员1 天前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish1 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱1 天前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者2 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶