#ifdef __GNUC__
#include <bits/stdc++.h>
#else
#include "bits/stdc++.h"
#pragma warning(disable:4996)
#endif // __GNUC__
using namespace std;
int hope;
int sub;
int cost;
const int N = 100000;
int num[N + 5] = { 0 };
vector<int> v;
int main()
{
scanf("%d", &hope);
scanf("%d", &cost);
v.push_back(cost);
scanf("%d", num + cost);
int max_price = 0;
while (1)
{
int a, b;
scanf("%d%d", &a, &b);
if (a == -1 && b == -1)
break;
num[a] = b;
v.push_back(a);
}
sort(begin(v), end(v));
max_price = v[v.size() - 1];
for (int i = 1; i < v.size(); ++i)
{
int k = (num[v[i - 1]] - num[v[i]]) / (v[i - 1] - v[i]);
for (int j = v[i - 1] + 1; j < v[i]; ++j)
num[j] = num[j - 1] + k;
}
scanf("%d", &sub);
for (int i = max_price + 1; i <= N && num[i - 1] >= sub; ++i)
num[i] = num[i - 1] - sub;
double d_left = cost - hope + num[hope + 1] / (double)(num[hope] - num[hope + 1]);
double d_right = cost - hope + num[hope - 1] / (double)(num[hope - 1] - num[hope]);
int left = d_left;
int right = d_right;
if (d_left != left)
left = (d_left > 0) ? left + 1 : left;
if (d_right != right)
right = (d_right > 0) ? right : right - 1;
int ans = (abs(left) < abs(right)) ? left : right;
printf("%d", ans);
#ifndef __GNUC__
system("pause");
#endif // !__GNUC__
return 0;
}
洛谷P1023 税收与补贴问题
最新推荐文章于 2023-08-11 08:56:50 发布