全部评论 
 这AB队长都不好骗分,绝了
ab队那个按照能力从高到低用哈希记录一下在数组里的位置,然后从高到低暴力遍历一遍,被挑过了就跳过。否则就往两边搜,直到挑足人数或者到边界。
用红黑树可解
感觉编程题没用上啥技巧,就一直暴力遍历就完事了
定义两个数组,一个数组存剩下人的位置,第二数组存剩下人的值,然后只要队列不为空,就继续选人,选完人删除两个数组对应的值,把删除人位置给制成A或者B,但是还是只过了60,这题建最大堆没用,不知道还有啥技巧,还是单纯的数据输入问题
难道数组中的值不会重复么?
int main() {  int n, m;  cin >> n >> m;  vector<int> nums(n, 0);  unordered_map<int, int> mp;  set<int> st;  for (int i = 0; i != n; ++i) {   cin >> nums[i];   mp[nums[i]] = i;   st.insert(nums[i]);  }   int flag = 0;//A队挑选  string res(n, 'C&(31605)#39;);  while (!st.empty()) {   int select = *st.rbegin();   int index = mp[select];   int count1 = 1, count2 = 1;   int change1 = 0, change2 = 0;   char c = 'A&(30502)#39;;   if (flag == 0) flag = 1;   else {    c = 'B&(30319)#39;;    flag = 0;   }   res[index] = c;   st.erase(select);   while (change1 < m && index - count1 >= 0) {    if (res[index - count1] == 'C&(31605)#39;) {     res[index - count1] = c;     st.erase(nums[index - count1]);     ++change1;    }    ++count1;   }   while (change2 < m && index + count2 < n) {    if (res[index + count2] == 'C&(31605)#39;) {     res[index + count2] = c;     st.erase(nums[index + count2]);     ++change2;    }    ++count2;   }  }  cout << res << endl;  //system("pause");  return 0; }
编程A了80,剩下的20超时了,选择题蒙了好多
选择题好多都是蒙的
编程题好难,有大哥分享一下吗
同问
相关推荐
 点赞 评论 收藏   
分享
  点赞 评论 收藏   
分享
 
 投递大连飞创信息技术有限公司等公司10个岗位
投递大连飞创信息技术有限公司等公司10个岗位