AcWing第 100 场周赛

文章涉及了三个不同的问题:乒乓球比赛中举办方需准备的水和毛巾数量计算,给定条件下的元素选择方案计数,以及最小化牌堆操作代价的问题。对于乒乓球比赛,计算了基于每场比赛需求的水和毛巾总数。元素选择问题关注在满足特定条件下的不同组合数量。最后,牌堆问题讨论如何通过优化初始排列减少操作代价。
摘要由CSDN通过智能技术生成

4953. 比赛

n 个人参加乒乓球比赛。

比赛一共进行了 n−1 场。

每场比赛举办方都需要准备 2×b+1 瓶水,其中 2×b 瓶水给选手(每场比赛 2 人参加,每人 b 瓶),1 瓶水给裁判。

此外,所有参加比赛的 n 名选手,每名选手在比赛期间总共会得到举办方准备的 p 条毛巾。

请你计算,举办方一共需要准备多少瓶水和多少条毛巾。

输入格式

共一行,三个整数 n,b,p。

输出格式

两个整数,表示所需准备的水的数量和毛巾的数量。

数据范围

前 33 个测试点满足 1≤n,b,p≤10。
所有测试点满足 1≤n,b,p≤500。

输入样例1:

5 2 3

输出样例1:

20 15

输入样例2:

8 2 4

输出样例2:

35 32
// Online C++ compiler to run C++ program online
#include <iostream>
using namespace std;
int main() {
   int n,b,p;
   cin>>n>>b>>p;
   cout<<(n-1)*(2*b+1) << " "<< p*n;
}

4954. 挑选

给定一个包含 n 个正整数 a1,a2,…,an 的集合。

集合中可能存在数值相同的元素。

请你从集合中挑选一些元素,要求同时满足以下所有条件:

  1. 被选中元素不少于 2 个。
  2. 所有被选中元素之和不小于 l 且不大于 r。
  3. 所有被选中元素之中最大元素与最小元素之差不小于 x。

请问,一共有多少种不同的选法。

注意:

  • 不考虑元素顺序,{a1,a2} 和 {a2,a1} 应当视为同一种选法。
  • 不同元素即使数值相同,也应当视为不同个体,即使 a1=a2

输入格式

第一行包含四个整数 n,l,r,x。

第二行包含 n 个整数 a1,a2,…,an。

输出格式

一个整数,表示不同选法的数量。

数据范围

前 33 个测试点满足 1≤n≤5。
所有测试点满足 1≤n≤15,1≤l≤r≤109,1≤x≤106,1≤ai≤106。

输入样例1:

3 5 6 1
1 2 3

输出样例1:

2

输入样例2:

4 40 50 10
10 20 30 25

输出样例2:

2

输入样例3:

5 25 35 10
10 10 20 10 20

输出样例3:

6

 

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n, l, r, x, ans = 0;
    scanf("%d%d%d%d", &n, &l, &r, &x);

    vector<int> a(n);
    for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);

    for (int i = 1; i < 1 << n; i ++ )
    {
        int mi = 2e9, mx = 0, cnt = 0;
        long long sum = 0;
        for (int j = 0; j < n; j ++ )
            if (i >> j & 1)
            {
                cnt ++ ;
                mi = min(mi, a[j]);
                mx = max(mx, a[j]);
                sum += a[j];
            }
        if (cnt == 1) continue;
        if (sum >= l && sum <= r && mx - mi >= x) ans ++ ;
    }

    printf("%d", ans);

    return 0;
}
 

 4955. 牌堆

有 n 张纸牌,编号 1∼n。

其中,第 i 张纸牌的价值为 vi。

你要玩一个游戏,具体流程如下:

首先,你要将 n 张牌一张叠一张地堆成一个牌堆,牌堆中纸牌的具体排列顺序由你决定。

接下来,你需要依次进行 m 次操作。

关于第 i 次操作:

  • 你的任务是将编号为 ai 的纸牌从牌堆中抽出,并置于牌堆顶部。
  • 如果执行此次操作时,不存在纸牌位于纸牌 ai 之上,即纸牌 ai 本来就位于牌堆顶部,则此次操作无需付出任何代价。
  • 如果执行此次操作时,存在纸牌位于纸牌 ai 之上,则此次操作需要付出代价,具体代价为所有位于纸牌 ai 之上的纸牌的价值之和(不要将价值和编号混淆)。

请你合理安排初始时牌堆中的纸牌排列顺序,从而使得执行完所有操作需要付出的总代价尽可能小。

输出总代价的最小可能值。

例如,如果一共有 3 张纸牌,价值分别为 1,2,3 一共需要进行 5 次操作,每次操作需要置于牌堆顶部的卡牌分别为 1,3,2,3,1。

那么一种最佳的初始时牌堆中纸牌排列顺序为从上到下依次为纸牌 1,3,2。

具体操作过程如下:

  • 第 11 次操作,需要将纸牌 11 置于牌堆顶部,由于纸牌 11 本来就在牌堆顶部,因此,所需代价为 00,执行完此次操作后,牌堆中纸牌排列顺序仍为 1,3,21,3,2。
  • 第 22 次操作,需要将纸牌 33 置于牌堆顶部,由于纸牌 11 位于纸牌 33 之上,因此,所需代价为 v1=1�1=1,执行完此次操作后,牌堆中纸牌排列顺序为 3,1,23,1,2。
  • 第 33 次操作,需要将纸牌 22 置于牌堆顶部,由于纸牌 1,31,3 位于纸牌 22 之上,因此,所需代价为 v1+v3=4�1+�3=4,执行完此次操作后,牌堆中纸牌排列顺序为 2,3,12,3,1。
  • 第 44 次操作,需要将纸牌 33 置于牌堆顶部,由于纸牌 22 位于纸牌 33 之上,因此,所需代价为 v2=2�2=2,执行完此次操作后,牌堆中纸牌排列顺序为 3,2,13,2,1。
  • 第 55 次操作,需要将纸牌 11 置于牌堆顶部,由于纸牌 2,32,3 位于纸牌 11 之上,因此,所需代价为 v2+v3=5�2+�3=5,执行完此次操作后,牌堆中纸牌排列顺序为 1,3,21,3,2。

付出的总代价为 0+1+4+2+5=120+1+4+2+5=12。

输入格式

第一行包含两个整数 n,m。

第二行包含 n 个整数 v1,v2,…,vn。

第三行包含 m 个整数 a1,a2,…,am。

输出格式

一个整数,表示总代价的最小可能值。

数据范围

前 33 个测试点满足 2≤n≤3,1≤m≤5。
所有测试点满足 2≤n≤500,1≤m≤1000,1≤vi≤100,1≤ai≤n。

输入样例:

3 5
1 2 3
1 3 2 3 1

输出样例:

12

 

#include <bits/stdc++.h>
using namespace std;

const int N = 1010;
int v[N], p[N], e[N], q[N], tot;
bool st[N];
int main()
{
    int n, m;
    scanf("%d%d", &n, &m);

    for (int i = 1; i <= n; i ++ ) scanf("%d", &v[i]);
    for (int i = 1; i <= m; i ++ ) scanf("%d", &p[i]);

    for (int i = 1; i <= m; i ++ )  
        if (!st[p[i]])  
        {
            e[++ tot] = p[i];  
            q[p[i]] = tot;  
            st[p[i]] = true; 
        }

    int ans = 0;  
    for (int i = 1; i <= m; i ++ )
    {
        int k = p[i];
        for (int j = q[p[i]] - 1; j >= 1; j -- ) 
        {
            ans += v[e[j]];
            q[e[j]] = j + 1;
            e[j + 1] = e[j];
        }
        e[1] = k, q[e[1]] = 1; 
    }

    printf("%d", ans);

    return 0;
} 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值