The 2018 ACM-ICPC Asia Qingdao Regional Contest(部分题解)

本文是2018 ACM-ICPC Asia Qingdao Regional Contest的部分解题报告,包括Function and Function、Books、Flippy Sequence等题目的解题思路和代码实现,旨在帮助读者熟悉区域赛题型。

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

摘要:

  本文是The 2018 ACM-ICPC Asia Qingdao Regional Contest(青岛现场赛)的部分解题报告,给出了出题率较高的几道题的题解,希望熟悉区域赛的题型,进而对其他区域赛的准备有借鉴意义。


 

Function and Function

题意

给出x和k,计算gk(x)。

解题思路

通过观察发现,g函数经过一定次数的递推一定会在0和1之间变换,所以循环内加判断提前结束递推即可。

易错分析

注意计算f(0)返回的是1的问题,下面的写法避免了这种错误。

代码实现

 1 #include <cstdio>
 2 using namespace std;
 3 
 4 typedef long long ll;
 5 ll a[] = {
   1,0,0,0,1,0,1,0,2,1};
 6 
 7 ll f(ll x) {
 8     ll s = 0;
 9     while(x) {
10         s += a[x%10];
11         x /= 10;
12     }
13     return s;
14 }
15 ll g(ll x, ll k) {
16     ll g0 = x, g1;
17     for(ll i = 1; i <= k; i++) {
18         if(g0 == 0) {
19             if((k - i) & 1)
20                 return 0;
21             else
22                 return 1;
23         }
24         g1 = f(g0);
25         g0 = g1;
26         //printf("#%lld\n", g0);
27     }
28     return g0;
29 }
30 int main()
31 {
32     int T;
33     scanf("%d", &T);
34     ll x, k;
35     while(T--) {
36         scanf("%lld%lld", &x, &k);
37         printf("%lld\n", g(x, k));
38     }
39     return 0;
40 }

Books

题意

输入书的总本数和已经购买的书的本数以及每本书的价格

问按照他的购买策略这个人最多带了多少钱,购买策略就是从前往后只要手中的钱够买当前这本书就买,不够买就跳过。

解题思路

除去样例中给出的三个特例,分别是n == m,m == 0,k > m(其中k表示0的个数),剩下的就是一般情况,直接贪心不是正确的结果,因为有0的存在,所以需要仔细考虑,我们肯定要将价格为0的书先买走,然后从前往后买,买够m本书之后(sum),在剩下的书中选择一本最便宜的书买不起(也就是minx-1),最后总的钱数sum + minx - 1就是答案。

助解样例

5 2

0 0 2 3 0

7 4

0 0 2 3 4 2 0 0

4 2

0 0 1 1

代码

#include <cstdio>
#include <algorithm>
using nam
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值