小红书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); }