当前位置:   article > 正文

Acwing第72场周赛+Leetcode第314场周赛_acwing 第72场周赛4625. 压缩文件

acwing 第72场周赛4625. 压缩文件

Acwing第72场周赛

第一题AcWing 4624. 最小值

分析向下取整可以用到math.h头文件中的floor()函数,最后输出时套用两个min()函数求三个数的最小值即可。

代码

  1. #include<iostream>
  2. #include<math.h>
  3. #include<algorithm>
  4. using namespace std;
  5. int main(){
  6. int a,b;
  7. int T;
  8. cin >> T;
  9. while(T --){
  10. scanf("%d%d",&a,&b);
  11. int c = floor((a + b)/3);
  12. cout << min(a,min(b,c)) << endl;
  13. }
  14. return 0;
  15. }

第二题:AcWing 4625. 压缩文件

分析:要使得压缩次数最小,所有必须要使每次压缩的体积变化最大,即 a - b 最大,用一个数组w[ ] 存储不同文件压缩前后体积变化的值,对数组进行降序排序,判断所有文件原体积的和sum是否小于m,若小于则直接输出0,若sum>m,则sum依次减去w[ ]数组中的值,直至 sum<m 时停止循环。

代码:

  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. typedef long long LL;
  6. const int N = 100010;
  7. int n, m;
  8. int w[N];
  9. int main()
  10. {
  11. scanf("%d%d", &n, &m);
  12. LL sum = 0;
  13. for (int i = 0; i < n; i ++ )
  14. {
  15. int a, b;
  16. scanf("%d%d", &a, &b);
  17. sum += a;
  18. w[i] = a - b;
  19. }
  20. sort(w, w + n, greater<int>());
  21. if (sum <= m) puts("0");
  22. else
  23. {
  24. for (int i = 0; i < n; i ++ )
  25. {
  26. sum -= w[i];
  27. if (sum <= m)
  28. {
  29. printf("%d\n", i + 1);
  30. return 0;
  31. }
  32. }
  33. puts("-1");
  34. }
  35. return 0;
  36. }

Leetcode第314场周赛

第一题2432. 处理用时最长的那个任务的员工

分析:此数组是一个严格递增的序列,用vector数组tt记录作差后较大的值以及最大值所对应的下标,遇到完成时间相同的员工要记录更小的id。

代码

  1. class Solution {
  2. public:
  3. int hardestWorker(int n, vector<vector<int>>& logs) {
  4. int m = logs.size();//一共有m个员工,不是题中的n
  5. vector<int> tt;
  6. tt.push_back(logs[0][1]);
  7. for(int i = 1 ; i < m; i ++)
  8. {
  9. int t = logs[i][1] - logs[i - 1][1];
  10. tt.push_back(t);
  11. }
  12. int t = 0;
  13. int id = 0;
  14. for(int i = 0 ; i < m; i ++)
  15. {
  16. if(tt[i] > t)
  17. {
  18. t = tt[i];
  19. id = logs[i][0];
  20. }
  21. else if(tt[i] == t)//出现有相等情况保存id较小的那一个
  22. {
  23. id = min(id , logs[i][0]);
  24. }
  25. }
  26. return id;
  27. }
  28. };

第二题2433. 找出前缀异或的原始数组

分析

根据公式变形可得:
perf[i] = ans[0] ^ ans[1]...^ ans[i - 1] ^ ans[i];
perf[i - 1] = ans[0] ^ ans[1]...^ ans[i - 1];
perf[i] ^ perf[i - 1] = ans[i]

代码

  1. class Solution {
  2. public:
  3. vector<int> findArray(vector<int>& pref) {
  4. int len = (int)pref.size();
  5. vector<int> ans(len);
  6. ans[0] = pref[0];
  7. for(int i = 1; i < len; i++) {
  8. ans[i] = pref[i] ^ pref[i - 1];
  9. }
  10. return ans;
  11. }
  12. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/727590
推荐阅读
相关标签
  

闽ICP备14008679号