手速win!
A 4950. 四则运算
直接输出!
手速win!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 7;
const int mod = 1e9 + 7;
signed main() {
int a, b, c;
cin >> a >> b >> c;
// cout << (a * b) * 1.0 / (b + c);
printf("%.4f", (a * b) * 1.0 / (b + c));
return 0;
}
B 4951.整理账本
pair排序,主要是读题。
手速win!
map本来是有序的,写复杂了,但是过了就行
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 7;
const int mod = 1e9 + 7;
signed main() {
int n, m;
cin >> n >> m;
map<int, int> B, S;
for (int i = 0; i < n; i++) {
char c;
int p, q;
cin >> c >> p >> q;
if (c == 'B') {
B[p] += q;
} else {
S[p] += q;
}
}
vector<pair<int, int>> a, b;
for (auto x : B) {
a.push_back({x.first, x.second});
}
for (auto x : S) {
b.push_back({x.first, x.second});
}
sort(a.begin(), a.end(), [&](pair<int, int> x, pair<int, int> y) {
return x.first > y.first;
});
sort(b.begin(), b.end(), [&](pair<int, int> x, pair<int, int> y) {
return x.first < y.first;
});
for (int i = min(m, (int)b.size()) - 1; i >= 0; i--) {
cout << "S " << b[i].first << " " << b[i].second << endl;
}
for (int i = 0; i < min(m, (int)a.size()); i++) {
cout << "B " << a[i].first << " " << a[i].second << endl;
}
return 0;
}
C 4952. 扩展区间
贪心
就贪心的去扩展,优先扩展左边,可以扩展则优先扩展,然后在判断右边扩展,如果可以扩展则扩展。
猜的,具体好像证明我也没想明白,好像是因为他一开始就是有序的??
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 7;
const int mod = 1e9 + 7;
vector<pair<int, int>> a;
int L[N];
int n;
int solve(vector<pair<int, int>> a) {
if(a.size()==1) return 1;
a[0].first -= L[0];
int cnt = 1;
for (int i = 1; i < n - 1; i++) {
if (a[i].first - L[i] > a[i - 1].second) {
a[i].first -= L[i];
cnt++;
continue;
}
if (a[i].second + L[i] < a[i + 1].first) {
a[i].second += L[i];
cnt++;
continue;
}
}
a[n - 1].second += L[n - 1];
cnt++;
return cnt;
}
signed main() {
cin >> n;
for (int i = 0; i < n; i++) {
int x;
cin >> x >> L[i];
a.push_back(make_pair(x, x));
}
cout<<solve(a)<<endl;
return 0;
}