赞
踩
陈述:将一个数组分成两个子序列,求两个子序列单独平均值的和的最大值
k>avg(第一个集合)显而易见,第一个集合的avg1减少,第二个avg2也减少,总体必然减少
int x, mx; LL sum; double ave, ans; cin >> T; while (T--) { cin >> n; sum = 0; mx = -1e9; for (int i = 1; i <= n; i++) { cin >> x; if (x > mx) mx = x; sum += x; } ans = (double)(sum - mx) / (n - 1) + mx; printf("%.9lf\n", ans); }
x[i-1]+1==x[i]则需要多加一块拼图,反之则不需要tot<=k则是yes,反之是nocin >> T; while (T--) { int tot = 0; cin >> n >> k; vci x(n), y(n); for (int i = 0; i < n; i++) { cin >> x[i]; } y = x; sort(y.begin(), y.end()); for (int i = 0; i < n; i++) { x[i] = lower_bound(y.begin(), y.end(), x[i]) - y.begin(); //查询这个数在数组中是第几小的,离散化 } reverse(x.begin(), x.end()); x.pb(2e9); reverse(x.begin(), x.end()); for (int i = 1; i <= n; i++) { if (x[i] != x[i - 1] + 1) tot++; } if (tot <= k) cout << "Yes" << el; else cout << "No" << el; }



cin >> n >> k; if (k == 0) { cout << 1 << el; } else { LL ans = 0; LL d = fpow(2, n - 1);//单个位置平局决策方案数 LL s = d * 2 % md; if (n & 1) { cout << fpow(d + 1, k) << el; } else { dwn(i, k, 1) { ans = ans + fpow(d - 1 + md, k - i) * fpow(s, i - 1) % md; //-1是去除掉全选的情况,+mod怕是负数 ans %= md; } ans = (ans + fpow(d - 1 + md, k)) % md;//第一个位置就赢了的情况 //-1是去除掉全选的情况,+mod怕是负数 cout << ans << el; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。