赞
踩
第一题:AcWing 4624. 最小值
分析:向下取整可以用到math.h头文件中的floor()函数,最后输出时套用两个min()函数求三个数的最小值即可。
代码:
- #include<iostream>
- #include<math.h>
- #include<algorithm>
-
- using namespace std;
-
- int main(){
- int a,b;
- int T;
- cin >> T;
- while(T --){
- scanf("%d%d",&a,&b);
- int c = floor((a + b)/3);
- cout << min(a,min(b,c)) << endl;
- }
- return 0;
- }

分析:要使得压缩次数最小,所有必须要使每次压缩的体积变化最大,即 a - b 最大,用一个数组w[ ] 存储不同文件压缩前后体积变化的值,对数组进行降序排序,判断所有文件原体积的和sum是否小于m,若小于则直接输出0,若sum>m,则sum依次减去w[ ]数组中的值,直至 sum<m 时停止循环。
代码:
- #include <iostream>
- #include <cstring>
- #include <algorithm>
-
- using namespace std;
-
- typedef long long LL;
-
- const int N = 100010;
-
- int n, m;
- int w[N];
-
- int main()
- {
- scanf("%d%d", &n, &m);
-
- LL sum = 0;
- for (int i = 0; i < n; i ++ )
- {
- int a, b;
- scanf("%d%d", &a, &b);
- sum += a;
- w[i] = a - b;
- }
-
- sort(w, w + n, greater<int>());
-
- if (sum <= m) puts("0");
- else
- {
- for (int i = 0; i < n; i ++ )
- {
- sum -= w[i];
- if (sum <= m)
- {
- printf("%d\n", i + 1);
- return 0;
- }
- }
- puts("-1");
- }
- return 0;
- }

分析:此数组是一个严格递增的序列,用vector数组tt记录作差后较大的值以及最大值所对应的下标,遇到完成时间相同的员工要记录更小的id。
代码:
- class Solution {
- public:
- int hardestWorker(int n, vector<vector<int>>& logs) {
- int m = logs.size();//一共有m个员工,不是题中的n
- vector<int> tt;
- tt.push_back(logs[0][1]);
- for(int i = 1 ; i < m; i ++)
- {
- int t = logs[i][1] - logs[i - 1][1];
- tt.push_back(t);
- }
- int t = 0;
- int id = 0;
- for(int i = 0 ; i < m; i ++)
- {
- if(tt[i] > t)
- {
- t = tt[i];
- id = logs[i][0];
- }
- else if(tt[i] == t)//出现有相等情况保存id较小的那一个
- {
- id = min(id , logs[i][0]);
- }
- }
- return id;
- }
- };

分析:
根据公式变形可得:
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]
代码:
- class Solution {
- public:
- vector<int> findArray(vector<int>& pref) {
- int len = (int)pref.size();
- vector<int> ans(len);
-
- ans[0] = pref[0];
- for(int i = 1; i < len; i++) {
- ans[i] = pref[i] ^ pref[i - 1];
- }
- return ans;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。