大佬们看看我的代码有没有什么问题,反正有三组数据都过了,但是线上测评一个没过。
顺带一提,三组数据一组是题目样例,一组是测试点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;
}