可达鸭模拟赛一补题报告(S23875张宸翰)

一、做题情况
第一题模拟  0/100,DEV-C++样例通过,模拟后补题AC;

第二题模拟  0/100,没读懂题,模拟后补题AC;

第三题模拟  0/100,做到一半把自己绕晕了,模拟后补题AC;

第四题模拟  0/100,不会做,模拟后补题AC。

比赛得分 1.0/100 2.0/100 3.0/100 4.0/100 0+0+0+0=0 0/400,赛后补题得分1.100/100 2.100/100 3.100/100 4.100/100 100+100+100+100=400 400/400

二、题解报告
1.做饭:
题面:

考试时代码:

考试时思维:首先,定义一个结构体shijian,里面包括3个int类型变量(时(shi)·分(fen)·秒(miao)).2个char 类型变量(冒号(m)·冒号(m1))。再定义两个shijian类型的变量k和now,表示达达回来的时间与现在的时间。通过提示,可知小可的准备时间(p). 小可的制作时间(q)(我写的时候,为了清晰,把p记为zhuenbei,把q记为zhizuo),秒数都十分得多,所以要定义成long long类型。输入完now的
shi.fen.miao和k的shi.fen.miao后,因为ta让我们判断如果可以赶在达达回家之前制作完晚饭,要考虑隔天的情况,所以我们需要把所有时间化为相同单位秒,定义两个累加器变量,分别是存now和k的(nowmiao和kmiao),同样也要定义成long long类型。nowmiao加上now的shi×3600(考试时写成360了). now的fen×60和now的miao, kmiao加上k的shi×3600(考试时也写成360了).
 k的fen×60和k的miao,再定义两个long long类型的变量剩余时间(syshj)和需要时间(xyshj)。syshj为kmiao减nowmiao,xyshj为zhuenbei加zhizuo。最后再比一下就行了(!!!注意:题目中说了达达到家之前,时间相等,就是NO!!!(别问我是怎么知道的)) 。                                        

AC代码承上:


2.评价标准:
题面:


考试时代码:

考试时思维:本题考试时没读懂题,所以没有。

补题后思维:仔细思考可以发现,当我对max或min(任何一个都是)进行修改时,新的可以分为以下情况。情况有三种:1.当前值加后比max还大,成为新的max 2.当前值减 后比min还小,成为新的min 3.当前值为原为max,减后比原本次大值小,次大值成为新的max。 4.当前值为原本min,加后比原本次小值大,次小值成为新的min 。由此,我们便可以得到新max和min。(看着有4种,但按思维来想,只有3种),经过以上判断,可写出较复杂的代码:

我们有两种选择:让min增大 (新min小于等于min) 。让最大值减小(让max小于等于原max) 。这样,我们就可以将原来的考虑 种情况降到了只需考虑 种情况!这样时间常数变小,并且实现更容易。

最终AC代码:

3.小可买菜:
题面:

 

 考试时代码(什么乱七八糟的,自己都看不懂,都绕进去了,你们想看自己看): 


考试时思维:并没有,主要因为做到一半把自己绕晕了。

补题后思维:暴力容易想。可以思考样例,折扣券最多1张,那么就选择价格最高的食材去使用。其余的食材可以按照每两个付其中最高的一个的方式去进行。这个过程需要排序,可以再想想这个问题中,我们要使得价格最低,也就是将高价商品想办法通过低价购买。在有优惠券的情况下,既然要最小化,那么我们可以将当前最小和当前最大在一起实现 (相当于买了小的,送了大的,只算小的钱)。在没有优惠劵的情况下,最大的价格是一定要花费的,使用最大带次大,一定是花费最小的方式。

AC代码承上:


4.美味佳肴:
题面:

考试时思维:本题不会,所以没有。

补题后思维:我们先来考虑不存在 ? 的情况。设字母Si在S中有cnti个。对于第1个Si,后面有cnti-1个Si能与它匹配,第二个则有 cnti-2个……
根据等差数列求和公式(首项+末项)×项数÷2,字母Si对答案的贡献即是(cnti*cnt-1)/2
因此,我们只需要统计不同的字母在 中出现的次数即可得出答案。那么加上 ? 之后怎样让答案最大呢?显然,由于 ? 只能同时看作一种字符,根据求和公式(cnti*cnt-1)/2,cnti越大,我们的结果增长的越多,因此我们肯定希望 ? 变成出现次数最多的字符。由以上分析,可写出AC的代码:


四、模拟后总结

以后要多理解,多做题,争取下次模拟AC一道题。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值