AtCoder Beginner Contest 365 C题 用纯数学方法 #21WA,其余AC,希望能有大佬来指点迷津,道出为何此方法不行。(原题链接在底下)
我看别人都是使用二分法,但我就不想用二分希望另辟蹊径,以此寻求代码之简洁美丽。
我的基本思路很简单,就是排序,然后根据 ΣAi + (n - i) x ans <= M 的变形公式求得ans最大值即可。
鄙人代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
ll n,m,tot,sum,ans=-1e9;
ll a[N];
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++)
{
cin>>a[i];
tot+=a[i];
}
if(tot<=m)
{
cout<<"infinite";
return 0;
}
if(n==1)
{
cout<<m;
return 0;
}
sort(a+1,a+1+n);
for(int i=1; i<n; i++)
{
sum+=a[i];
ans=max(ans,(m-sum)/(n-i));
}
cout<<ans;
return 0;
}
原题链接:C - Transportation Expenses
如有哪位神犇助我解惑,鄙人将以至高无上之礼(关注)之款待作为回报!