字条跳动笔试(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; }