Codeforces Round 953 (Div. 2) A~F

A.Alice and Books(思维)

题意:

爱丽丝有 n n n本书。第 1 1 1本书包含 a 1 a_1 a1页,第 2 2 2本书包含 a 2 a_2 a2页, … \ldots n n n本书包含 a n a_n an页。爱丽丝的操作如下:

  • 她把所有的书分成两个非空的书堆。这样,每本书最后都会被恰好放在两堆书中的一堆里。
  • 爱丽丝阅读每一堆中编号最高的一本书。

爱丽丝非常喜欢阅读。帮她找出把书分成两堆后,她最多可以阅读的总页数。

分析:

观察题目很容易看出来,最后一个数字是必须取的,用前 n − 1 n-1 n1个数字的最大值加上最后一个值求和即可。

代码:

#include<bits/stdc++.h>

using namespace std;
const int N = 110;
int a[N];

void solve() {
   
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++i) {
   
        cin >> a[i];
    }
    int ans = a[n];
    int ans2 = 0;
    for (int i = 1; i < n; ++i) {
   
        ans2 = max(ans2, a[i]);
    }
    cout << ans + ans2 << endl;
}

int main() {
   
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

B.New Bakery(数学)

题意:

鲍勃决定开一家馒头店。开业当天,他烤出了 n n n个可以出售的馒头。通常一个馒头的价格是 a a a个硬币,但为了吸引顾客,鲍勃组织了以下促销活动:

  • 鲍勃选择某个整数 k k k( 0 ≤ k ≤ min ⁡ ( n , b ) 0\le k\le\min(n,b) 0kmin(n,b))。
  • 鲍勃以修改后的价格出售第一批 k k k个馒头。在这种情况下,售出的 i i i 1 ≤ i ≤ k 1\le i\le k 1ik)个馒头的价格是 ( b − i + 1 ) (b-i+1) (bi+1)个硬币。
  • 剩下的 ( n − k ) (n-k) (nk)个馒头以每个 a a a个硬币的价格出售。

注意 k k k可以等于 0 0 0。在这种情况下,鲍勃将以每个 a a a硬币的价格出售所有的馒头。

帮助鲍勃确定出售所有 n n n个馒头所能获得的最大利润。

分析:

首先当 a ≥ b a≥b ab时, k k k 0 0 0即可。

a < b a\lt b a<b时,要想使利润尽可能大,必须满足前 k k k天的利润都比 a a a大,即要满足 b − k ≥ a b−k≥a bka。可以得出 k k k最大为 b − a b−a ba,然后计算即可。

注意 k k k需要满足不超过 m i n ( n , b ) min(n,b) min(n,b)的限制,所以最终 k = m i n ( n , b − a ) k=min(n,b−a) k=min(n,ba),答案为 ( b + b − k + 1 ) k 2 + ( n − k ) a \frac{(b+b−k+1)k}{2}+(n−k)a 2(b+bk+1)k+(nk)a

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;

void solve() {
   
    LL n, a, b;
    cin >> n >> a >> b;
    if (a >= b) {
   
        cout << n * a << endl;
        return;
    }
    LL k = min(n, b - a);
    cout << (b + b - k + 1) * k / 2 + a * (n - k) << endl;
}

int main() {
   
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

C.Manhattan Permutations(构造)

题意:

让我们把排列 † ^{\dagger} 的曼哈顿值 p p p表示为 ∣ p 1 − 1 ∣ + ∣ p 2 − 2 ∣ + … + ∣ p n − n ∣ |p_1-1|+|p_2-2|+\ldots+|p_n-n| p11∣+p22∣++pnn的值。

例如,对于排列 [ 1 , 2 , 3 ] [1,2,3] [1,2,3],曼哈顿值为 ∣ 1 − 1 ∣ + ∣ 2 − 2 ∣ + ∣ 3 − 3 ∣ = 0 |1-1|+|2-2|+|3-3|=0 ∣11∣+∣22∣+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值