社区讨论

第一个点本地输出正确,但是提交就RE,

P1023[NOIP 2000 普及组] 税收与补贴问题参与者 5已保存回复 20

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
20 条
当前快照
1 份
快照标识符
@mi6xqyly
此快照首次捕获于
2025/11/20 12:32
4 个月前
此快照最后确认于
2025/11/20 15:21
4 个月前
查看原帖
CPP
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>

using namespace std;
const int maxn = 100000 + 10;
int aim;
int tprice, tamount;

int r = -1, l = maxn - 10;
int amount[maxn];

int k;

int main()
{
	cin >> aim;
	while (cin >> tprice >> tamount && tprice != -1)
	{
		amount[tprice] = tamount;
		r = max(tprice, r);
		l = min(tprice, l);
	}

	for (int nl = l; nl <= r; nl++)
	{
		int nr;
		for (nr = nl + 1; amount[nr] == 0; nr++);
		int k = (amount[nr] - amount[nl]) / (nr - nl);
		for (int cur = nl + 1; cur<nr; cur++)
		{
			amount[cur] = (cur - nl)*k + amount[nl];
		}
		nl = nr;
	}

	cin >> k;

	for (; amount[r] - k > 0; r++) amount[r + 1] = amount[r] - k;

	double minx = -0x3f, maxx = 0x3f;
	int cb = l;

	for (int cur = l; cur <= r; cur++)
	{
		double sh = (cb - aim)*amount[aim] + (cur - cb) * amount[cur];
		double xi = amount[aim] - amount[cur];
		if (xi>0)
		{
			minx = max(sh / xi, minx);
		}
		else if (xi<0)
		{
			maxx = min(sh / xi, maxx);
		}
	}

	minx = ceil(minx);
	maxx = floor(maxx);

	if (minx <= maxx)
	{
		int p = abs(minx)<abs(maxx) ? minx : maxx;
		cout << p;
	}
	else cout << "NO SOLUTION";

	return 0;
}
A了第二个与第四个点
第一个(样例)与第三个RE
本地开调试器输入未见报错
是Linux和windows下的差别?

回复

20 条回复,欢迎继续交流。

正在加载回复...