笑死,本地手打测试三组数据全过,到线上测评全WA???
查看原帖
笑死,本地手打测试三组数据全过,到线上测评全WA???
302459
疯狂的阿飘楼主2022/7/13 17:01

大佬们看看我的代码有没有什么问题,反正有三组数据都过了,但是线上测评一个没过。

顺带一提,三组数据一组是题目样例,一组是测试点2数据,一组是测试点4数据。

代码如下

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,n = 0,ans = 0,max,maxn,t;
	int ansa,ansb;
	long long x[10005],y[10005];
	cin >> a;
	for(int i = 0;i <= 10005;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 <= 10005;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];
	}
	if(max - x[0] >= 7000)
	{
		int p = (y[0] - maxn) / (max - x[0]);
		for(int k = t;k <= 10005;k++)
		{
			x[k] = x[0] + 1 + k - t;
			y[k] = y[0] -(k + 1 - t) * p;
			if(x[k] == max)
			{
				t = k;
				break;
			}
		}
	}
	if(n == 0)
	{
		n = (max - a) * f + maxn;
	}
	long long b,c; 
	for(int k = 0;k <= 100;k++)
	{
		c = (a + k - x[0]) * n;
		for(int l = 0;l <= t;l++)
		{
			b = (x[l] + k - x[0]) * y[l];
			if(b <= c) ans = ans + 1;
			else break;
		}
		if(ans == t + 1)
		{
			ansa = k;
			break;
		}
		else
		{
			ansa = 999;
			ans = 0;
		}
	}
	ans = 0;
	for(int m = 0;m >= -100;m--)
	{
		c = (a + m - x[0]) * n;
		for(int l = 0;l <= t;l++)
		{
			b = (x[l] + m - x[0]) * y[l];
			if(b <= c) ans = ans + 1;
			else break;
		}
		if(ans == t + 1)
		{
			ansb = m;
			break;
		}
		else
		{
			ansb = -999;
			ans = 0;
		}
	}
	if(ansa + ansb > 0) cout << ansb;
	if(ansa + ansb < 0) cout << ansa;
	if(ansa == 999 and ansb == -999) cout << "NO SOLUTION";
	return 0;
}
2022/7/13 17:01
加载中...