Sagheer and Nubian Market CodeForces - 812C (二分+贪心)

long long相关的运算必须全部用log long!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1e6+5;
typedef long long ll;
ll n,s,a[maxn],b[maxn];
int check(int mid) {
	memset(b,0,sizeof(b));
	for(ll i=1; i<=n; i++)b[i]=a[i]+i*mid;//注意ll运算中所有数都必须是ll,i也一样(否者第11个样例会WA) 
	sort(b+1,b+1+n);
	ll sum=0;
	for(int i=1; i<=mid; i++)sum+=b[i];
	if(sum>s)return 0;
	else return sum;
}
int main() {
	cin>>n>>s;
	for(int i=1; i<=n; i++)cin>>a[i];
	ll l=0,r=n,ans=0;
	while(l<r) {
		ll mid=l+(r-l+1)/2;
		if(check(mid)) {
			l=mid;
			ans=check(mid);
		} else r=mid-1;
	}
	cout<<l<<" "<<ans<<endl;
}

猜你喜欢

转载自blog.csdn.net/Alanrookie/article/details/106920889