Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //code 1
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const int N = 10006;
- const int X = 100000000 + 6;
- ll a[N], b[N];
- ll c[N];
- int n, k;
- ll d[N]; //new horse
- bool check(ll mid) {
- for (int i = 1; i <= n; ++i) {
- d[i] = a[i] + b[i] * mid;
- }
- sort(d + 1, d + n + 1); reverse(d + 1, d + n + 1);
- sort(c + 1, c + n + 1); reverse(c + 1, c + n + 1);
- int cnt = 0;
- int j = 1;
- for (int i = 1; i <= n; ++i) {
- if (d[i] > c[j]) {
- ++cnt;
- ++j;
- }
- else {
- while (d[i] <= c[j] && j <= n) {
- ++j;
- }
- if (j > n) break;
- ++cnt;
- ++j;
- }
- if (j > n) break;
- }
- if (cnt >= k) return true;
- else return false;
- }
- int main () {
- int T; scanf("%d", &T);
- while (T--) {
- scanf("%d%d", &n, &k);
- for (int i = 1; i <= n; ++i) {
- scanf("%lld%lld", &a[i], &b[i]);
- }
- for (int i = 1; i <= n; ++i) {
- scanf("%lld", &c[i]);
- }
- int L = -1, R = X;
- //todo: binary search
- while (R - L > 1) {
- int mid = (L + R) / 2;
- if (check(mid)) R = mid;
- else L = mid;
- }
- if (R == X) R = -1;
- printf("%d\n", R);
- }
- }
- //code 2
- #include <bits/stdc++.h>
- using namespace std;
- int main () {
- multiset<int> st;
- st.insert(1);
- cout << st.size() << endl;
- cout << st.empty() << endl;
- st.insert(1);
- cout << st.size() << endl;
- set<int>::iterator iter = st.find(3);
- if (iter == st.end()) {
- cout << "Not found" << endl;
- }
- else if (iter != st.end()) {
- cout << "Found" << endl;
- }
- st.erase(1);
- st.erase(st.find(1));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement