牛客网算法学习笔记-智力题

一、  涂色问题

题目:你要在一个nxm的格子图上涂色,你每次可以选择一个未涂色的格子涂上你开始选定的那种颜色。同时为了美观,我们要求你涂色的格子不能相邻,也就是说,不能有公共边,现在问你,在采取最优策略的情况下,你最多能涂多少个格子?

给定格子图的长n和宽m。请返回最多能涂的格子数目。

思路:这个问题就很简单啦,当n*m为奇数的时候返回n*m/2+1,当为偶数的时候返回n*m/2

class Paint {
public:
    int getMost(int n, int m) {
        if(n*m%2==1)
            return n*m/2+1;
        return n*m/2;
    }
};


二、 赛马问题

直接上代码

class HorseRace {
public:
    int winMost(vector<int> oppo, vector<int> horses, int n) {
        sort(oppo.begin(),oppo.end());
        sort(horses.begin(),horses.end());
        int res=0;
        int k=0;
        for(int i=0;i<oppo.size();i++)
            for(int j=0;j<oppo.size();j++){
                if(oppo[i]<horses[j]&&j>k){
                    res++;
                    k=j;
                    break;
                }
            }
        return res;
    }
};


三、 跳格子问题

题目:你和你的朋友正在玩棋子跳格子的游戏,而棋盘是一个由n个格子组成的长条,你们两人轮流移动一颗棋子,每次可以选择让棋子跳1-3格,先将棋子移出棋盘的人获得胜利。我们知道你们两人都会采取最优策略,现在已知格子数目,并且初始时棋子在第一格由你操作。请你计算你是否能获胜。

给定格子的数目n(n为不超过300的正整数)。返回一个整数,1代表能获胜,0代表不能获胜。

思路:最优策略是,剩下4个格子,让对方先走,自己肯定能赢

class Jump {
public:
    int checkWin(int n) {
        if((n-1)%4==0)
            return 0;
        return 1;
    }
};


四、 游戏问题

题目:A与B做游戏。 在一个n*m的矩阵中的出发点是(1,m),终点是(n,1),规则是只能向左移动一格,向下一格或向左下移动一格,先走到终点的为winner。 A先走。

给定两个整数n和m,请返回最后的获胜者的名字(A或B)。

思路:最优策略是两个人每次都是走两格,因为是A先走,那么m*n%2==0的情况是A赢,否则B赢

class Game {
public:
    char getWinner(int n, int m) {
        if(n*m%2==0)
            return 'A';
        return 'B';
    }
};


五、 数组清空练习

题目:现在有一个整数数组,其元素值均为1-n范围内的某个整数,现在你和你的朋友在玩一个游戏,游戏的目的是把数组清空,你们轮流操作,你是先手,每次操作你可以删除数组中值为某个数的元素任意多个(当然数组中值为这个数的元素个数应大于等于你删除的个数,且你至少要删除一个数)。最先把数组清空的人获得胜利。假设你们都采取最优策略,请你计算你能否获得胜利。

给定一个整数数组A和元素个数n。请返回一个整数,1代表你能获胜,0代表你不能获胜。

这道题思路不太懂,什么情况下A能获胜,有人理解的话可以留言

class Clear {
public:
    int getWinner(vector<int> A, int n) {
        int res=0;
        map<int,int> m;
        for(int i=0;i<n;i++)
            m[A[i]]++;
        for(int i=0;i<n;i++){
            res^=m[A[i]];
            m[A[i]]--;
        }
        return res!=0;
    }
};


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牛客网的课程《Linux高并发服务器开发》中包含了项目笔记,其中涉及到了WebServer的开发。根据引用的信息,这门课程的学习进度可能由于个人原因而拖延了一段时间。在第五章的项目学习中,可能包含了关于多进程服务器开发的学习内容。不过具体的学习笔记可能还没有迁移到pad上,暂时无法获取详细的内容[2]。根据引用,在服务器开发中,使用单Reactor和多线程的方法可以提高效率,并充分利用多核CPU的性能优势。然而,使用多线程开发可能需要在各自的线程上加锁保护临界区数据,相对较为复杂。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [牛客网c++web服务器项目学习笔记-第0章 课程介绍](https://blog.csdn.net/weixin_45139984/article/details/132205586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【牛客网C++服务器项目学习】Day12-网络编程的两种事件处理模式](https://blog.csdn.net/qq_42518941/article/details/122283291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值