鹅鹅鹅别把我笑亖了
这题好水啊…… ( ( (能理解我的心情吗 ? ) ?) ?),我随便扔的几个数字都能过,水到不行
直接上代码吧
#include <iostream> // 基本入出力ストリーム
#include <algorithm> // 一般的なアルゴリズム(ソート、ルックアップ、やり直し、二分ルックアップなど)
#include <vector> // 動的配列(スペースが足りないと自動的に拡張されます)
#include <queue> // スタック(先に入って先に出ます)
#include <stack> // スタック(先に入ってから出ます)
#include <set> // 集合(反復しない順序)です
#include <map> // キー値対コンテナ(マッピング)
#include <list> // 両方向リスト
#include <math.h> // すうがくかんすう
#include <functional> // 通用的函数绑定和调用机制一般的なバインディングと呼び出しの仕組み
#define endl '\n'
#define pii pair<int, int>
#define pdd pair<double, double>
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
using namespace std;
const int N = 2e5 + 10, M = N << 1;
int a[N], b[N], huafei, n, s, mid, num, ans;
bool chazhao(int mid){
huafei = 0;
for(int i = 1; i <= n; i++){
b[i] = a[i] + mid * i;
}
sort(b + 1, b + n + 1);
for(int i = 1; i <= mid && huafei <= s; i++){
huafei += b[i];
}
return huafei <= s;
}
void solve() {
cin >> n >> s;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
int l = 1, r = n;
while(l <= r){
mid = (l + r) >> 1;
if(chazhao(mid)){
l = mid + 1;
num = mid;
ans = huafei;
}
else r = mid - 1;
}
cout << num << " " << ans;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
while(t--) solve();
return 0;
}
拜拜了您内~