算法笔记day02

目录

游游的you

腐烂的苹果

孩子们的游戏


游游的you

游游的you__牛客网

这里需要注意 oooo 是3分而不是两分。

算法思路:

拼出you可以得2分,先拼出所有的you,在将所有的o拼在一起即可。

选3个字母个数最小的就是能拼出you的个数。

cpp 复制代码
#include <iostream>
using namespace std;

int main()
{
    int q = 0;
    cin >> q;
    for(int i = 0; i < q; i++)
    {
        int a = 0, b = 0, c = 0;
        cin >> a >> b >> c;
        int m = min(a, min(b,c));//找到三个数中字母最少的个数,就是能拼出you的个数
        int n = b - m;//剩余o的个数
        cout <<2 * m + max(n-1,0) <<endl; //一个you是2分,oo是1分 ooo是2分 oooo是3分依次类推
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

腐烂的苹果

腐烂的苹果_牛客题霸_牛客网

算法思路:

这是一道多源的bfs题,

找到所有的烂苹果,遍历一遍数组,将所有的烂苹果位置入队列。

ret是传染的时间,每当ret++,队列里的烂苹果都会将周围的好苹果变为烂苹果。

传染过后烂苹果就会出队列,变为烂苹果的位置就会入队列。

最后遍历一遍数组,看有没有没被传染过的位置,如果有就返回-1 。

cpp 复制代码
class Solution {
public:

    int m = 0, n = 0;//数组的长款
    bool vis[1010][1010] = { 0 };//标记烂苹果的位置
    int dx[4] = {0, 0, 1, -1};//向量数组,访问上下左右
    int dy[4] = {1, -1, 0, 0};

    int rotApple(vector<vector<int> >& grid) 
    {
        //将所有的烂苹果放到一个队列里,时间++,扩散一次
        m = grid.size(), n = grid[0].size();
        queue<pair<int, int>> q;

        for(int i = 0; i < m; i++)//找到所有烂苹果入队列
        {
            for(int j = 0; j < n; j++)
            {   
                if(grid[i][j] == 2)
                q.push({i,j});
            }
        }
            
        int ret = 0;
        while(q.size())
        {
            //扩散
            int sz = q.size();
            ret++;
            while(sz--)
            {
                auto [a,b] = q.front();
                q.pop();
                for(int k = 0; k < 4; k++)
                {
                    int x = a + dx[k], y = b + dy[k];
                    if(x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] && grid[x][y] == 1)
                    {
                        q.push({x,y});
                        vis[x][y] = true;
                    }
                }
       
            }
            
        }
        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {   
                if(grid[i][j] == 1 && !vis[i][j])
                return -1;
            }
        }

        return ret - 1;
    }
};

孩子们的游戏

孩子们的游戏(圆圈中最后剩下的数)_牛客题霸_牛客网

题目解析:

这是一个约瑟夫环的问题。

使用动态规划来解决这个问题

1.状态表示

dp[i]:表示i次报数,该删除的位置。

2.状态转移方程

i-1次删除,删除的位置是dp[i-1],下次删除的位置就是dp[i-1] + 1 + (m - 1),

找到最后一次删除的下标就是,最后获胜的小朋友

cpp 复制代码
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @param m int整型 
     * @return int整型
     */
    int LastRemaining_Solution(int n, int m) 
    {
        int f = 0;
        for(int i = 2; i < n; i++)
        {
            f = (f + m) % i;
        }
        return f;
    }
};
相关推荐
摇滚侠13 分钟前
Vue 项目实战《尚医通》,实名认证模块获取用户信息,笔记54
vue.js·笔记
lxp1997413 小时前
vue笔记摘要-更新中
前端·vue.js·笔记
wh_xia_jun4 小时前
桑拿控制器项目持久化层笔记
笔记
立志成为大牛的小牛4 小时前
数据结构——五十二、散列函数的构造(王道408)
数据结构·笔记·程序人生·考研·算法
yuxb736 小时前
Kubernetes 核心概念与微服务架构解析
笔记·kubernetes
d111111111d7 小时前
关于STM32的选项字节的问题:如果我通过操作指针把数据写在了单片机的选项字节区域那么换别的程序时候数据会进行变化吗?
笔记·stm32·单片机·嵌入式硬件·学习
ouliten7 小时前
C++笔记:std::stringbuf
开发语言·c++·笔记
安如衫9 小时前
【机器学习基础】Attention in Transformers:注意力机制
笔记·深度学习·学习·机器学习·注意力机制
十安_数学好题速析9 小时前
幂次之争:巧用对称性破解指数不等式
笔记·学习·高考
せいしゅん青春之我10 小时前
【JavaEE进阶】JVM-面试中的高频考点1
java·网络·jvm·笔记·面试·java-ee