Codeforces 967 贪心服务器分配资源 线性基XOR递增序列构造
分类:
IT文章
•
2023-11-07 23:38:31
A
#include<bits/stdc++.h>
using namespace std;
int dir[4][2] = {{0, -1}, {0, 1}, { -1, 0}, {1, 0}};
typedef long long ll;
int n, s;
int h[105];
int m[105];
int num[1000005];
int getans(int h1, int m1, int h2, int m2)
{
int x1 = (h2 - h1) * 60;
int x2 = m2 - m1;
return x1 + x2;
}
int main()
{
//freopen("out.txt", "w", stdout);
cin >> n >> s;
for (int i = 1; i <= n; i++)
{
cin >> h[i] >> m[i];
}
if (h[1] * 60 + m[1] >= 1 + s)
{
cout << 0 << " " << 0 << endl;
return 0;
}
for (int i = 1; i <= n - 1; i++)
{
int now = getans(h[i], m[i], h[i + 1], m[i + 1]);
if (now >= s * 2 + 2)
{
m[i]++;
m[i] += s;
while(m[i] >= 60)
{
m[i] -= 60;
h[i]++;
}
cout << h[i] << " " << m[i] << endl;
return 0;
}
}
m[n]++;
m[n] += s;
while (m[n] >= 60)
{
m[n] -= 60;
h[n]++;
}
cout << h[n] << " " << m[n] << endl;
}
View Code
B
#include<bits/stdc++.h>
using namespace std;
int dir[4][2] = {{0, -1}, {0, 1}, { -1, 0}, {1, 0}};
typedef long long ll;
int n;
ll a, b;
ll s[100005];
ll sum = 0;
priority_queue<int, vector<int>, less<int> >que;
int main()
{
//freopen("out.txt", "w", stdout);
cin >> n >> a >> b;
for (int i = 1; i <= n; i++)
{
cin >> s[i];
sum += s[i];
if (i != 1)
{
que.push(s[i]);
}
}
int anser = 0;
if (s[1]*a >= b * sum)
{
cout << 0 << endl;
return 0;
}
int flag = 1;
while (flag)
{
sum -= que.top();
que.pop();
anser++;
if (s[1]*a >= b * sum)
{
cout << anser << endl;
return 0;
}
}
}
View Code
#include<bits/stdc++.h>
using namespace std;
int dir[4][2] = {{0, -1}, {0, 1}, { -1, 0}, {1, 0}};
typedef long long ll;
ll l[100005];
ll e[100005];
ll n, m, cl, ce, v;
ll x1, y1, x2, y2;
ll anser = 0;
ll addx, addy;
int main()
{
//freopen("out.txt", "w", stdout);
cin >> n >> m >> cl >> ce >> v;
for (int i = 1; i <= cl; i++)
{
cin >> l[i];
}
sort(l + 1, l + cl + 1);
for (int i = 1; i <= ce; i++)
{
cin >> e[i];
}
sort(e + 1, e + ce + 1);
int q;
cin >> q;
while (q--)
{
anser = INT_MAX;
cin >> x1 >> y1 >> x2 >> y2;
if (x1 == x2)
{
cout << abs(y1 - y2) << endl;
continue;
}
if (y1 > y2)
{
swap(x1, x2);
swap(y1, y2);
}
addy = abs(x1 - x2);
int now = lower_bound(l + 1, l + cl + 1, y1) - l - 1;
//cout<<" "<<now<<endl;
int lef = max(now - 2, 1);
int rig = min(now + 2, (int)cl);
//cout << lef << " l1 " << rig << endl;
for (int i = lef; i <= rig; i++)
{
addx = abs(l[i] - y1) + abs(l[i] - y2);
anser = min(anser, addx + addy);
}
now = lower_bound(l + 1, l + cl + 1, y2) - l - 1;
lef = max(now - 2, 1);
rig = min(now + 2, (int)cl);
//cout << lef << " l2 " << rig << endl;
for (int i = lef; i <= rig; i++)
{
addx = abs(l[i] - y1) + abs(l[i] - y2);
anser = min(anser, addx + addy);
}
addy = abs(x1 - x2) / v;
if (addy * v < abs(x1 - x2))
{
addy++;
}
now = lower_bound(e + 1, e + ce + 1, y1) - e - 1;
lef = max(now - 2, 1);
rig = min(now + 2, (int)ce);
//cout << lef << " e1 " << rig << endl;
for (int i = lef; i <= rig; i++)
{
addx = abs(e[i] - y1) + abs(e[i] - y2);
anser = min(anser, addx + addy);
}
now = lower_bound(e + 1, e + ce + 1, y2) - e - 1;
lef = max(now - 2, 1);
rig = min(now + 2, (int)ce);
//cout << lef << " e2 " << rig << endl;
for (int i = lef; i <= rig; i++)
{
addx = abs(e[i] - y1) + abs(e[i] - y2);
anser = min(anser, addx + addy);
}
cout << anser << endl;
}
}