• 2022.10.29每日刷题打卡(补


    由于前一段时间电脑坏了,所以把鸽的补回来~

    Orray

    题意:对a重新排序使得a的前缀或和最大

    思路:

    题目时间限制2s,所以可以稍微暴力地去写。

    要使前缀或和,那么第一个位置一定要放数组最大的值,剩下的排序我们可以遍历一下去找到或最大的结果找的一个可以存一个,最后没存进去的按顺序输出就可以啦。

    1. #include
    2. void solve()
    3. {
    4. int n;
    5. std::cin >> n;
    6. std::vector<int> a(n);
    7. std::vector<bool> vis(n, false);
    8. for(int &ai : a) std::cin >> ai;
    9. std::sort(a.begin(), a.end());
    10. int ans = a.back();
    11. std::vector<int> res;
    12. res.push_back(ans);
    13. for(int i = 0; i < n; i++){
    14. int f = 0;
    15. bool fy = 0;
    16. for(int j = 1; j < n; j++)
    17. if(!vis[f] && (ans | a[j]) > (ans | a[f]))
    18. f = j, fy = 1;
    19. if(fy) ans |= a[f], vis[f] = 1, res.push_back(a[f]);
    20. }
    21. for(auto x : res) std::cout << x << " ";
    22. for(int i = 0; i < n - 1; i++) if(!vis[i]) std::cout << a[i] << " ";
    23. std::cout << "\n";
    24. }
    25. int main()
    26. {
    27. std::ios::sync_with_stdio(false);
    28. std::cin.tie(nullptr);
    29. int t;
    30. std::cin >> t;
    31. while (t--)
    32. {
    33. solve();
    34. }
    35. return 0;
    36. }

    等等.....这题这样写会TLE

    其实仔细想想就可以想到,2e5的数据这样跑必T,那么怎么优化呢,其实可以考虑到如果我们标记的fy没有变化那么说明这个时候已经找不到最大的或值,所以在这里直接结束循环即可。

    1. #include
    2. void solve()
    3. {
    4. int n;
    5. std::cin >> n;
    6. std::vector<int> a(n);
    7. std::vector<bool> vis(n, false);
    8. for(int &ai : a) std::cin >> ai;
    9. std::sort(a.begin(), a.end());
    10. int ans = a.back();
    11. std::vector<int> res;
    12. res.push_back(ans);
    13. for(int i = 0; i < n; i++){
    14. int f = 0, fy = 0;
    15. for(int j = 1; j < n; j++)
    16. if(!vis[f] && (ans | a[j]) > (ans | a[f]))
    17. f = j, fy = 1;
    18. if(fy) ans |= a[f], vis[f] = 1, res.push_back(a[f]);
    19. else break;
    20. }
    21. for(auto x : res) std::cout << x << " ";
    22. for(int i = 0; i < n - 1; i++) if(!vis[i]) std::cout << a[i] << " ";
    23. std::cout << "\n";
    24. }
    25. int main()
    26. {
    27. std::ios::sync_with_stdio(false);
    28. std::cin.tie(nullptr);
    29. int t;
    30. std::cin >> t;
    31. while (t--)
    32. {
    33. solve();
    34. }
    35. return 0;
    36. }

     

     

     

  • 相关阅读:
    概率论与数理统计---全概率、贝叶斯公式、事件独立性
    三万字盘点Spring/Boot的那些常用扩展点
    微信小程序实现轮播图
    Thrift/RPC学习分享
    一步教你怎么使用Vuex
    压力大,休息日都没有,更别说年休假了
    MySQL高可用集群解决方案之:lvs+keepalived+mysql cluster实现负载均衡
    Mybatis-Plus学习笔记
    QT学习_07_样式表的初步学习
    将docker镜像打成tar包
  • 原文地址:https://blog.csdn.net/weixin_62802134/article/details/127641996