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