小红书2021.9.18 笔试

小红书2021.9.18 笔试

随缘 记录下= =

T1憨批机器人走路

机器人走路 C行R列 O表示能走B表示障碍, R表示起点, 开始时机器人朝上,通过命令 可以改变朝向和走动,求最终坐标和起点的差值 92%的代码

#include<iostream>
#include<string>
using namespace std;

int q[1100][1100] = {0};
string ss[1100];

int main()
{    
    //先存个地图
    int r, c; cin >> r >> c;
    for(int i = 0; i < r; i ++) cin >> ss[i];
    int xx, yy;
    for(int i = 0 ; i < r; i ++) 
        for(int j =0; j < c; j ++){
            if(ss[i][j] == 'R'){
                xx = i; yy = j;
                q[i][j] = 0;
                continue;
            }
            if(ss[i][j] == 'B') q[i][j] = 0;
            if(ss[i][j] == 'O') q[i][j] = 1;
        }
    int ksx = xx, ksy = yy; //起点坐标 存一下 xx yy 表示当前坐标
    int n; cin >> n;
    //cout << n << endl;


    // 上左下右
    int dx[] = {1,0,-1,0}, dy[] = {0,-1,0,1};
    //初始状态
    int fx = 2;
    //cout << "----x----y----"<<xx+1 <<" " << yy+1 << endl;
    string ml1;
    for(int i = 0; i <= n; i ++) {

        cin >>ml1;
        //cout <<" ml1------------" << ml1 << endl;
        //cout << ml1 << endl;
        if(ml1[0] == 'T') {
            string ml2; cin >> ml2;
            //cout <<" ml2------------" << ml2 << endl;
            if(ml2[0] == 'l') fx = (fx-1+4)%4; //左转90
            else fx = (fx+1+4)%4; //右转90
        }
        else {
            int ml3; cin >> ml3;
            //cout <<" ml3------------" << ml3 << endl;
            for(int i = 0; i < ml3; i ++) {
                int a = xx+dx[fx], b = yy+dy[fx];
                //cout << "---a---b---" << a<<" " << b<<endl;
                //cout << "q[a][b] " <<q[a][b] <<endl;
                if(a >= 0 && b >= 0 && a < r && b < c && !q[a][b]){ //能走就更新 不能走就拉倒
                    xx = a; yy = b;
                }
            }
        }
        //cout << "----x----y----"<<xx+1 <<" " << yy+1 << endl;
    }
    //cout << xx <<" " << yy << endl;
    cout << xx - ksx <<" "<< yy -ksy;
    return 0;
/*
3 6 
BBBBBB 
BRBOBB
BBBBOB
6
Turn right
Forward 3
Turn left
Forward 2
Turn left
Forward 1
*/
}

T2 完美数组?

原来的题目忘记了 总之就是 一个数组 任意调换两个元素 让里面的数变成有序(升序降序dou'k)最少需要几次,输出次数 AC

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n; cin >> n;
    vector<int> vc(n);
    for(int i = 0 ; i < n; i ++)
        {
            cin >> vc[i];
        }
    vector<int> num(vc);
    sort(num.begin(),num.end());
    unordered_map<int,int> hash;
    for(int i = 0; i < n; i ++) {
        hash[num[i]] = i;
    }

    int res = 0;
    vector<bool> flag(n, false);
    for(int i = 0 ; i < n; i ++)
        {
            if(!flag[i]) {
                int j = i;
                while(!flag[j]) {
                    flag[j] = true;
                    j = hash[vc[j]];
                }
                res++;
            }
        }
    unordered_map<int,int> hash2;
    for(int i = 0; i < n; i ++) {
        hash2[num[i]] = n-i-1;
    }
    int res2 = 0;
    vector<bool> flag2(n, false);
    for(int i = 0 ; i < n; i ++)
        {
            if(!flag2[i]) {
                int j = i;
                while(!flag2[j]) {
                    flag2[j] = true;
                    j = hash2[vc[j]];
                }
                res2++;
            }
        }

       cout << min(n - res,n - res2);
}

T3 一道动态规划的题 太菜了骗了点分就留了

#小红书##笔经#
全部评论
蹲一个第三题答案
点赞 回复 分享
发布于 2021-09-18 13:27
请问第二题的代码是什么意思呀,劳烦解释一下。。。
点赞 回复 分享
发布于 2021-09-19 00:31

相关推荐

2024-12-29 11:08
湖南工业大学 Java
程序员牛肉:简历没什么大问题了。 而且不要再换项目了。三月份就开暑期实习了,现在都一月份了。实在来不及重新开一下项目了。把一个项目写完或许很快,但是把一个项目搞懂吃透并不简单。所以不要换项目了,把你简历上面的两个项目好好挖一挖吧。 具体 体现在:你能不能流利的说出你的项目的每一个功能点代码实现?你能不能说出在这块除了A技术之外,还有其他技术能够实现嘛?如果有其他技术能够实现,那你这块为什么选择了你当前用的这个技术?
投递牛客等公司
点赞 评论 收藏
分享
01-24 12:50
门头沟学院 C++
投票
菜狗二号:还有啥想的 指定国有行啊,去了就开始幸福美满的生活了,选华子不是折腾自己么,最终财富积累度是差不多的,但是幸福指数是相差甚远的
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客企业服务