腾讯笔试编程题,真难!
1、AC
string s; while(cin>>s){ stack<char> sk; string ans; for(int i = 0; i < s.size(); i++){ if(sk.empty() && s[i] != '[')ans.push_back(s[i]); else{ if(s[i] == ']'){ string temp; while(sk.top()!= '|'){ temp.push_back(sk.top()); sk.pop(); } sk.pop();// remove '|' reverse(temp.begin(),temp.end()); string num; while(sk.top()!='['){ num.push_back(sk.top()); sk.pop(); } reverse(num.begin(),num.end()); int len = atoi(num.c_str()); string t; for(int i = 0; i < len; i++) t += temp; sk.pop();// remove '[' if(sk.empty()) ans += t; else for(int i = 0; i < t.size(); i++)sk.push(t[i]); }else{ sk.push(s[i]); } } } cout << ans << endl; }2、超时,思想是归并排序,就是这题浪费太多时间了
void mergeSort(vector<int>& q, vector<int>& tmp, int l, int r, long long& ans) { if (l >= r) return; int mid = l + (r - l) / 2; mergeSort(q, tmp, l, mid, ans); mergeSort(q, tmp, mid + 1, r, ans); int k = 0, i = l, j = mid + 1; while (i <= mid && j <= r) if (q[i] <= q[j]) tmp[k ++ ] = q[i ++ ];//前一个数比后一个数小 //后一个数比前一个数大 把前面的数对 都加到ans else tmp[k ++ ] = q[j ++ ],ans += mid - i + 1; //合并比较长的数组的那一部分 while (i <= mid) tmp[k ++ ] = q[i ++ ]; while (j <= r) tmp[k ++ ] = q[j ++ ]; //把数据放到temp数组中 for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j]; } int InversePairs(vector<int> &nums) { int len = nums.size(); vector<int> tmp(len, 0); long long ans = 0; mergeSort(nums, tmp, 0, (int)nums.size() - 1, ans); return ans; } int main() { int n; while(cin >> n){ long long len = (long long)pow(2,n); vector<int> nums(len); for(int i = 0; i < len; i++)cin>>nums[i]; int m; cin>>m; vector<int> ms; int ll = 0; for(int i = 0; i < m; i++){ int t; cin>>t; t = (int)ceil(pow(2,t)); auto itstart = nums.begin(), itend = nums.begin(); while(itend != nums.end()){ for(int j = 0; j < t; j++){ if(itend!=nums.end()) itend++; } reverse(itstart, itend); itstart = itend; } //for(auto x : nums)cout << x << endl; ms.push_back(InversePairs(nums)); } for(auto x : ms)cout << x << endl; } return 0; }3、直接在白板上写的 通过60%,超时,没有保存代码
4、直接在白板上写的 通过50,超时,没有保存代码,大概是找左右相邻的数,然后分别往左边和右边遍历,每次遍历如果有比当前的高的cnt++并更新当前的高度。
5、codeforces 第689A,可以参考,没有调出
真的难啊!!!
#腾讯##笔试题目##题解#