字条跳动笔试(60-83.33-100-000)菜鸡做个分享
第一题:闹钟
表示自己真的粗心大意,不等号打错了,没有来得及检查
#include <iostream>
#include <vector>
using namespace std;
int main(){
// input param
int N;
cin >> N;
vector<vector<int> > array(N, vector<int>(2, 0));
for (int i = 0; i < N; i++){
cin >> array[i][0];
cin >> array[i][1];
}
int X;
cin >> X;
int A, B;
cin >> A;
cin >> B;
// 考虑失误,应该diff <= 0 而不是diff >= 0
int minVal = 20*60;
int outA, outB;
for (int i = 0; i < N; i++){
int Hi = array[i][0];
int Mi = array[i][1];
int temp = Hi*60 + Mi;
int late = A*60 + B;
int diff = (temp + X)%(24*60) - late;
if (diff <= 0 && diff < minVal){
minVal = diff;
outA = Hi;
outB = Mi;
}
}
cout << outA << " " << outB << endl;
return 0;
} 第二题:加密,也没有AC,可能还是有些小问题,妄指正 #include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(){
int N, K;
cin >> N;
cin >> K;
string str;
cin >> str;
vector<int> array;
for (int i = 0; i < str.size(); i++){
int temp = str[i] - '0';
array.push_back(temp);
}
vector<int> res;
res.push_back(array[0]);
for (int i = 1; i < N; i++){
int temp = 0;
if (res.size() < K-1){
for (int j = 0; j < res.size(); j++)
temp ^= res[j];
} else {
for (int j = 0; j < K-1; j++)
temp ^= res[res.size()-1-j];
}
temp = temp ^ array[i];
res.push_back(temp);
}
for (int i = 0; i < N; i++)
cout << res[i];
cout << endl;
return 0;
} 第三题:奖金 AC #include <iostream>
#include <vector>
using namespace std;
int main(){
int N;
cin >> N;
vector<int> array(N, 0);
for (int i = 0; i < N; i++)
cin >> array[i];
vector<int> res(N, 100);
for (int i = 1; i < N; i++){
if (array[i] > array[i-1])
res[i] = res[i-1] + 100;
}
for (int j = N-2; j >= 0; j--){
if (array[j] > array[j+1] && res[j] <= res[j+1])
res[j] = res[j+1] + 100;
}
int Sum = 0;
for (int i = 0; i < N; i++)
Sum += res[i];
cout << Sum << endl;
return 0;
} 第四题:虽然是000,但是我感觉自己的思路应该没问题,再多5分钟调试代码就好了,本地简单测试了一下感觉可以,妄指正。 我的思路是根据给的边更新路径表,应该是最小生成树的问题吧,表示一直没有准备过这方面知识,这次也给提了个醒,看来需要准备下。
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<vector<int> > path;
for (int i = 0; i < n-1; i++){
vector<int> temp(2, 0);
cin >> temp[0];
cin >> temp[1];
path.push_back(temp);
}
// cout << "output" << endl;
// for (int i = 0; i < path.size(); i++){
// cout << path[i][0] << " " << path[i][1] << endl;
// }
vector<vector<int> > table(n, vector<int>(n, 0));
for (int i = 0; i < path.size(); i++){
int node1 = path[i][0]-1;
int node2 = path[i][1]-1;
table[node1][node2] = 1;
table[node2][node1] = 1;
}
// debug
cout << "output init table" << endl;
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
cout << table[i][j] << " ";
}
cout << endl;
}
// update table;
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
if (i == j)
continue;
if (table[i][j]){
for (int k = j+1; k < n; k++){
if (table[i][k]){
if (table[j][k] == 0){
table[j][k] = table[i][j] + table[i][k];
table[k][j] = table[j][k];
}
}
}
}
}
}
// debug
cout << "update output tabel" << endl;
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
cout << table[i][j] << " ";
}
cout << endl;
}
long long array0 = 0;
long long array1 = 0;
long long array2 = 0;
for (int i = 0; i < n; i++){
for (int j = i+1; j < n; j++){
if (table[i][j] % 3 == 0)
array0 += table[i][j];
else if (table[i][j] % 3 == 1)
array1 += table[i][j];
else
array2 += table[i][j];
}
}
cout << array0 << " " << array1 << " " << array2 << endl;
return 0;
}
查看19道真题和解析