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