BestCoder 1st Anniversary

本文解析了BestCoder纪念日的两个编程题:Souvenir和HiddenString。通过具体实例介绍了如何计算最小纪念品费用,并探讨了如何从字符串中找出满足特定条件的三个互不相交子串的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

problem 1001

Souvenir

 
 Accepts: 901
 
 Submissions: 2743
 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 262144/262144 K (Java/Others)
问题描述
今天是BestCoder一周年纪念日. 比赛管理员Soda想要给每个参赛者准备一个纪念品. 商店里纪念品的单价是p元, 同时也可以花q元购买纪念品套装, 一个套装里有mm个纪念品.

今天总共有nn个参赛者, Soda想要知道最少需要花多少钱才可以给每个人都准备一个纪念品.
输入描述
输入有多组数据. 第一行有一个整数TT (1 \le T \le 10^5)(1T105​​), 表示测试数据组数. 然后对于每组数据:

一行包含4个整数 n, m, p, q (1 \le n, m, p, q \le 10^4)(1n,m,p,q104​​).
输出描述
对于每组数据输出最小花费.
输入样例
2
1 2 2 1
1 2 3 4
输出样例
1
3
Hint
对于第一组数据, Soda可以1元购买一个套装. 对于第二组数据, Soda可以直接花3元购买一个纪念品.

思路:当m小于n,你可以就p*m与q谁大谁小进行选择,当m大于n,就p*n与q谁大谁小进行考虑

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int T;
    cin>>T;
    int n,m,p,q;
    while(T--)
    {
     cin>>n>>m>>p>>q;
     int sum=0;
     while(n>=m)
     {
         if(p*m>q)
            sum+=q;
         else
            sum+=p*m;
         n-=m;
     }
     if(p*n<q)
            sum+=p*n;
     else
            sum+=q;
     cout<<sum<<endl;
    }
    return 0;
}
View Code

problem1002

Hidden String

 
 Accepts: 437
 
 Submissions: 2174
 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 262144/262144 K (Java/Others)
问题描述
今天是BestCoder一周年纪念日. 比赛管理员Soda有一个长度为nn的字符串ss. 他想要知道能否找到ss的三个互不相交的子串s[l_1..r_1]s[l1​​..r1​​], s[l_2..r_2]s[l2​​..r2​​], s[l_3..r_3]s[l3​​..r3​​]满足下列条件:

  1. 1 \le l_1 \le r_1 < l_2 \le r_2 < l_3 \le r_3 \le n1l1​​r1​​<l2​​r2​​<l3​​r3​​n

  2. s[l_1..r_1]s[l1​​..r1​​], s[l_2..r_2]s[l2​​..r2​​], s[l_3..r_3]s[l3​​..r3

转载于:https://www.cnblogs.com/zsyacm666666/p/4787511.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值