百度笔试 10.15 题解 麻将卷

百度麻将笔试 10.15 题解
后端卷

第一题 贪心
n选k 如果选择的数的下一个数没被选,积分+1
所以最后一个数一定能拿一分,而在 n/2的转折处
1 (2) 3 (4) 5 (6)(n = 6, k = 3) 可以拿三分
k = 4 时
(1) (2) 3 (4) 5 (6) 仍然可以拿三分,也就是选择了这个1 不会得分但也不会丢分
然后注意数字范围取long long 
while(t --){
        long long int n;
        long long int k;
        cin>>n>>k;
        //n个数里最多可以得n/2 ……
        //1 - n里假如 n 是奇数 1,2,3可以选2两个数
        //假如是偶数那可以选
        long long int res = 0;
        if(n % 2 == 1) res = n/2 + 1;
        else res = n/2;
        //到这里是最多能拿多少分,之后每选一个还得扣
        if(k <= res) cout<<k<<endl;
        else{
            long long int tmp = n + 1;
            cout<<tmp - k << endl;
        }
    }

第二题 约瑟夫环问题
注意到每一次选择一个数,都能确定下来结果的一位数
比如 1 2 3 4
第一次1到队尾,我们就能确定2是结果里的第一位,并且每一次都能确定下来一位
所以本质是约瑟夫环问题
代码就不放了,我是用队列模拟的

第三题 麻将
想了半天dp想不出来,那就搜索一下试试,刚好过了
——————
//dp想破头想不出来
//试一下搜索
//广度优先搜索
//每一轮找刻子或者顺子
//然后四轮后找雀头
//找得到就res ++
//数据量应该支持
//哈希表记录一下string

unordered_set<string> uset;
void dfs(vector<int> &amp;amp;v,int round){
    if(round == 4){
        for(int i = 0;i<v.size();i++){
            if(v[i] >= 2){
                v[i] -=2;
                string tmp;
                for(int j = 0;j < v.size();j++){
                    tmp.push_back(v[j] + '0');
                    tmp.push_back(j + '0');
                }
                v[i] += 2;
                uset.insert(tmp);
            }
        }
        return;
    }
    //dfs
    //先搜刻子,再搜顺子
    for(int i = 0;i<v.size();i++){
        if(v[i] >= 3){
            v[i] -= 3;
            dfs(v, round + 1);
            v[i] += 3;
        }
    }
    for(int i = 1;i < v.size()-1;i++){
        if(v[i-1] >= 1 &amp;amp;&amp;amp; v[i] >= 1 &amp;amp;&amp;amp; v[i + 1] >= 1){
            v[i - 1] --;
            v[i] --;
            v[i + 1] --;
            dfs(v,round + 1);
            v[i - 1] ++;
            v[i] ++;
            v[i + 1] ++;
        }
    }
}
int main() {
    int n;
    cin>>n;
    if(n <= 3) cout<<0;
    else{
        vector<int> vo(n);
        fill(vo.begin(),vo.end(),4);
        dfs(vo, 0);
        cout<<uset.size()<<endl;
    }
    
}
全部评论
请问佬是三道全a了吗?有约面吗?
点赞 回复 分享
发布于 10-16 16:57 辽宁

相关推荐

第一题,注意区分奇偶的情况就行,比如n为4&nbsp;&nbsp;k为2&nbsp;此时ans为2&nbsp;,k为3时,ans还是为2这里和奇数的情况不同,奇数超了n/2直接减去超过的数量即可第二题,找规律可以看出来,第一次操作可以确定第一个字符,第2&nbsp;,3次操作可以确定第2&nbsp;&nbsp;,3个字符,所以直接用链表就行,代码具体核心为&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ListNode&nbsp;last&nbsp;=&nbsp;pre;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre&nbsp;=&nbsp;dummy;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&amp;amp;lt;&nbsp;s.length();&nbsp;i&nbsp;++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;注意这里不能使用&amp;amp;lt;=&nbsp;&nbsp;因为最后一步&nbsp;cur&nbsp;会为null&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ListNode&nbsp;cur&nbsp;=&nbsp;pre.next;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre.next&nbsp;=&nbsp;cur.next;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre&nbsp;=&nbsp;pre.next;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last.next&nbsp;=&nbsp;cur;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last&nbsp;=&nbsp;cur;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur.next&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}第三题,一共13种情况,每一种情况自己都手算一次,,算出来一个对一个案例,至少1,2,3都是0;哈哈哈哈
投递百度等公司10个岗位
点赞 评论 收藏
分享
百度麻将第二题,这样做有问题吗?public&nbsp;class&nbsp;Main&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scanner&nbsp;in&nbsp;=&nbsp;new&nbsp;Scanner(System.in);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;注意&nbsp;hasNext&nbsp;和&nbsp;hasNextLine&nbsp;的区别&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(in.hasNext())&nbsp;{&nbsp;//&nbsp;注意&nbsp;while&nbsp;处理多个&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;=&nbsp;in.nextLine();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rotateStr(str));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;rotateStr(String&nbsp;str)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[]&nbsp;charArray&nbsp;=&nbsp;str.toCharArray();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Boolean[]&nbsp;bs&nbsp;=&nbsp;new&nbsp;Boolean[charArray.length];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arrays.fill(bs,&nbsp;false);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;g&nbsp;=&nbsp;2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinkedList&lt;Character&gt;&nbsp;list&nbsp;=&nbsp;new&nbsp;LinkedList&lt;&gt;();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;bs.length;&nbsp;i+=2)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(charArray[i]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bs[i]&nbsp;=&nbsp;true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(list.size()&nbsp;!=&nbsp;charArray.length)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g&nbsp;=&nbsp;2&nbsp;*&nbsp;g;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;start&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;bs.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!bs[i]){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;=&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;start;&nbsp;i&nbsp;&lt;&nbsp;charArray.length;&nbsp;i+=g)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(charArray[i]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bs[i]&nbsp;=&nbsp;true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuilder();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(Character&nbsp;c&nbsp;:&nbsp;list)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(c);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sb.toString();&nbsp;&nbsp;&nbsp;&nbsp;}}
投递百度等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务