TopCoder SRM 644 Div2 Problem 500 - LostCharacter (贪心)

题意

给出一些字符串数组,可能包含有?。现在要求输出每个字符串在按字典序排序后的最靠前的位置。

思路

一开始看不懂题目,以为是要一起考虑的。原来是每个字符串分开考虑。

因为数据量很小,所以直接无脑暴力。

对于每个字符串,把它里面的?都改成a,然后把其他的字符串里的?都改成z,这样就能使位置尽量靠前。

顺便吐槽一下,连了一个上午加半个下午的TC,终于给连上了。

代码

  
  
  
  
  1. class LostCharacter {
  2. public:
  3. vector<int> getmins(vector<string> str) {
  4. vector<int> ans;
  5. vector<string> tmp;
  6. tmp = str;
  7. if (str.empty()) return ans;
  8. for (int i = 0; i < str.size(); i++)
  9. {
  10. string target = str[i];
  11. for (int j = 0; j < target.size(); j++)
  12. if (target[j] == '?') target[j] = str[i][j] = 'a';
  13. for (int j = 0; j < str.size(); j++)
  14. {
  15. if (i == j) continue;
  16. for (int k = 0; k < str[j].size(); k++)
  17. if (str[j][k] == '?') str[j][k] = 'z';
  18. }
  19. sort(str.begin(), str.end());
  20. ans.push_back(lower_bound(str.begin(), str.end(), target) - str.begin());
  21. str = tmp;
  22. }
  23. return ans;
  24. }
  25. };

你可能感兴趣的:(ACM)