蓝桥杯打卡Day2


文章目录

  • 糖果分享游戏
  • 玛雅人的密码

一、糖果分享游戏IO链接

本题思路: 本题是一道模拟题,最终需要每个人得到相同的糖果,那么此时我们开辟一个数组用来保存每个人分一半的结果,然后每个人都需要从左边拿到对方糖果,那么左边就是可以计算为(n+i-1)%n。然后对于糖果为奇数的人进行++操作。

cpp 复制代码
#include <bits/stdc++.h>

constexpr int N=110;

int n;
int c[N],tmp[N];//c[N]用来表示每个人所拥有的糖果数量,tmp[N]临时数组用来分配

bool check()
{
    for(int i=0;i<n-1;i++)
        if(c[i]!=c[i+1])//判断当前是否所有人都拥有相同的糖果
            return false;
    return true;
}

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    
    while(std::cin>>n,n){
        int cnt=0;
        
        for(int i=0;i<n;i++) std::cin>>c[i];
        
        while(!check()){
            cnt++;
            
            for(int i=0;i<n;i++) tmp[i]=c[i]/2;//首先将所有人的糖都分一半
            
            for(int i=0;i<n;i++){
                c[i]=tmp[i]+tmp[(n+i-1)%n];
                if(c[i]%2) c[i]++;
            }
        }
        
        std::cout<<cnt<<" "<<c[0]<<std::endl;
    }
    return 0;
}

二、玛雅人的密码IO链接

**本题思路:**本题思路是BFS+哈希的方式解决,首先我们需要将序列串加入到队列中,利用哈希表来统计进行每一次交换后的字符是否重复,如果不重复利用哈希表来进行统计变换到当前字符串的操作次数

cpp 复制代码
#include <bits/stdc++.h>

int n;
std::string s;
std::unordered_map<std::string,int> hash;//利用哈希表来统计每次交换后的字符

int bfs()
{
   std::queue<std::string> q;
   q.push(s);//利用bfs的思路将当前需要进行操作的字符串加入到队列中去
   
   hash[s]=0;
   
   //进行宽搜
   while(!q.empty()){
       auto t=q.front();
       q.pop();
       
       for(int i=0;i<n-3;i++){//遍历前n-3个字符以4个字符为长度看是否满足条件
           if(t.substr(i,4)=="2012")
                return hash[t];
       }
       
       for(int i=0;i<n-1;i++){
           std::string tmp=t;//这里需要保留当前t串,是为了统计次数
           std::swap(tmp[i],tmp[i+1]);
           if(!hash.count(tmp))
           {
               hash[tmp]=hash[t]+1;
               q.push(tmp);
           }
       }
   }
   
   return -1;
}

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    
    std::cin>>n;
    std::cin>>s;
    std::cout<<bfs()<<std::endl;
    return 0;
}
相关推荐
熊猫钓鱼>_>1 小时前
面试出现 606 次的第 K 大,被拆成三个问题问
算法·面试·职场和发展·校招·面经·oj·ai生成
职业信用与履历核验知识库2 小时前
职业画像的数据质量与缺失值处理可靠吗?来源、验证与纠错方法
职场和发展
考研保研资料分享3 小时前
北大软微软件工程保研经验:哈工大面试追问与补录风险取舍
面试·职场和发展·软件工程
yuanxi2003 小时前
长鑫科技4F架构突破:技术节点如何改写客户价值判断
职场和发展·创业创新·学习方法
java_nnnn4 小时前
LeetCode刷题滑动窗口(长度最小的子数组)
算法·leetcode·职场和发展
救救孩子把4 小时前
AI面试八股文-01_1-LLM基础概念(Token-上下文窗口-幻觉)
人工智能·面试·职场和发展·llm·token
Nil20815 小时前
leetcode 763划分字母区间
算法·leetcode·职场和发展
不会就选b16 小时前
算法日常・每日刷题--<动态规划>19
算法·leetcode·职场和发展
考研保研资料分享16 小时前
新闻传播保研经验:中传预推免面试、广告学代表作与实习准备(2025)
面试·职场和发展
夏幻灵18 小时前
每日一题:LeetCode 165:比较版本号
算法·leetcode·职场和发展