摆了,真的摆了,只能求助大佬了......
查看原帖
摆了,真的摆了,只能求助大佬了......
302459
疯狂的阿飘楼主2022/7/11 11:59

最后一个测试点死活过不去啊,下载次数也用完了,作为一个蒻寄的我也找不出自己代码的问题,所以在此诚挚求助!

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,n,ans = 0,max = 0,maxn = 0,t;
	int ansa,ansb;
	long long x[100005],y[100005];
	cin >> a;
	for(int i = 0;i <= 100005;i++)
	{
		cin >> x[i] >> y[i];
		if(x[i] < 0 and y[i] < 0)
		{
			t = i;
			break;
		}
		if(x[i] > max)
		{
			max = x[i];
			maxn = y[i];
		}
		if(x[i] == a) n = y[i];
	}
	int f;
	cin >> f;
	for(int j = t;j <= 100005;j++)
	{
		x[j] = max + 1 + j - t;
		y[j] = maxn - (j - t + 1) * f;
		if(y[j] < 0)
		{
			t = j;
			break;
		}
		if(x[j] == a) n = y[j];
	}
	for(int k = 0;k <= 100000;k++)
	{
		for(int l = 0;l <= t;l++)
		{
			if((x[l] + k - x[0]) * y[l] <= (a + k - x[0]) * n) ans = ans + 1;
			else break;
		}
		if(ans == t + 1)
		{
			ansa = k;
			break;
		}
		else
		{
			ansa = 99999;
			ans = 0;
		}
	}
	ans = 0;
	for(int m = 0;m >= -100000;m--)
	{
		for(int l = 0;l <= t;l++)
		{
			if((x[l] + m - x[0]) * y[l] <= (a + m - x[0]) * n) ans = ans + 1;
			else break;
		}
		if(ans == t + 1)
		{
			ansb = m;
			break;
		}
		else
		{
			ansb = -99999;
			ans = 0;
		}
	}
	if(ansa + ansb > 0) cout << ansb;
	if(ansa + ansb < 0) cout << ansa;
	if(ansa == 99999 and ansb == -99999) cout << "NO SOLUTION";
	return 0;
}

在这里还是简单说一下我的思路吧:将所有可能的情况以数组的形式存储下来,然后分别用"补贴"与"收税"的循环对其进行不等式判断,保存最合理----最接近0的那一项然后再比较收税与补贴"哪个好",输出结果.--------------可就是在最后一个测试点死活过不去啊啊啊啊啊!

真的,麻烦哪位大佬指教一下本蒻寄QAQ!

2022/7/11 11:59
加载中...