PeaceSheep's blog PeaceSheep's blog
首页
  • 分类
  • 标签
  • 归档
相关链接
提建议&咨询&赞赏
GitHub (opens new window)

PeaceSheep

以最简洁、易懂的话解决问题
首页
  • 分类
  • 标签
  • 归档
相关链接
提建议&咨询&赞赏
GitHub (opens new window)
  • OS比赛

  • 程序设计

    • domjudge相关的一些常见问题
    • resolver滚榜工具使用指南
    • 暑期集训

      • 关于"暑期集训"目录的说明
      • 7月22日-ABC149
      • 7月23日-ABC150
        • \[ABC150-A\]500日元硬币
          • 题意
          • 解法
        • \[ABC112-B\]超过时间限制
          • 题意
          • 解法
        • \[ABC150-B\]ABC计数
          • 题意
          • 解法
        • \[ABC150-C\]计数顺序
          • 题意
          • 解法
        • \[ABC108-C\]三角关系
          • 题意
          • 解法
        • \[ABC108-C\]三角关系
        • \[ABC150-D\]半公倍数
          • 题意
          • 解法
      • 7月24日-ABC151
  • 竞赛
  • 程序设计
  • 暑期集训
PeaceSheep
2024-07-25
目录

7月23日-ABC150

# [ABC150-A]500日元硬币


# 题意

给定kkk枚500500500日元的硬币,判断是否大于等于xxx。

# 解法

直接定义两个变量kkk和xxx并输入,判断k×500k \times 500k×500是否大于等于xxx即可。


# [ABC112-B]超过时间限制


# 题意

给定多条路线,每条路线iii有一个费用cic_ici​和时间tit_iti​。求出在满足时间限制的情况下最小的回家费用。

# 解法

遍历所有的路线,如果满足时间限制,则判断费用是否比当前最小的还要小,如果是的话更新最小费用即可。


# [ABC150-B]ABC计数


# 题意

判断给定字符串中有多少个子串为"ABC"。

# 解法

子串/连续子序列:要求连续

子序列:不要求连续

先定义一个ans=0,然后枚举iii从222到n−1n-1n−1,如果s[i-1]== 'A' && s[i] == 'B' && s[i+1] == 'C',则ans加一。最后输出ans即可。


# [ABC150-C]计数顺序


# 题意

给定两个111到nnn的排列ppp和qqq,判断他们按照字典序全排列后的索引差值的绝对值。

# 解法

本题数据量较小,因此可以直接暴力枚举。

定义两个string类型变量输入,让ppp是较小的那一个,qqq是较大的那一个,从ppp开始迭代,一直到qqq走了多少步输出就可以。

c++函数:next_permutation( 起始位置,终止位置),可以让起始位置和终止位置之间的序列得到下一个排列,如果没有下一个序列返回false,否则返回true。

对于一个string类型变量来说,起始位置是s.begin(),结束位置是s.end()。


# [ABC108-C]三角关系


# 题意

给定两个整数n,kn,kn,k,计算三元组(a,b,c)(a,b,c)(a,b,c)的数量。三元组满足a,b,ca,b,ca,b,c均小于nnn且,a+b,a+c,b+ca+b,a+c,b+ca+b,a+c,b+c都是kkk的倍数。

# 解法

考虑a,b,ca,b,ca,b,c都是kkk的倍数,一定是满足条件的,一共有(nk)3(\frac{n}{k}) ^ 3(kn​)3种可能。

另外的情况,假设a,b,ca,b,ca,b,c中有不是kkk的倍数的数字,如果kkk是奇数,可以证明a,b,ca,b,ca,b,c必定是kkk的倍数。因此只需要考虑kkk为偶数的情况。

剩下的情况里两个数字加起来为kkk,只有一种情况,就是三个数字都是k2\frac{k}{2}2k​的奇数倍的和。


# [ABC108-C]三角关系


证明:

因为a+b,a+ca+b,a+ca+b,a+c都是kkk的倍数,因此b%k==c%k==tempb\%k == c\%k == tempb%k==c%k==temp。又因为b+c==kb+c==kb+c==k,因此temp+temp=2∗temp=ktemp+temp = 2*temp = ktemp+temp=2∗temp=k。即bbb和ccc除以kkk的余数都是k2\frac{k}{2}2k​,即他们都是k2\frac{k}{2}2k​的奇数倍。

如果有一个是偶数倍,则加起来一定会多一个k2\frac{k}{2}2k​,如果两个都是偶数,则包含在第一种情况里。

因此,如有kkk是偶数,答案还需要再加上[1,n][1,n][1,n]中 k2\frac{k}{2}2k​的奇数倍的个数,即(nk2−nk)( \frac{n}{ \frac{k}{2} } - \frac{n}{k})(2k​n​−kn​)


# [ABC150-D]半公倍数


# 题意

给定一个长度为 n(1≤n≤105)n \ (1 \leq n \leq 10^5)n(1≤n≤105) 的数组aaa,且 aia_iai​ 是偶数,求 [1,M][1, M][1,M] 有多少个 XXX 满足对任意 X=ai⋅(p+0.5)X = a_i \cdot (p + 0.5)X=ai​⋅(p+0.5) 成立。

# 解法

原来的公式可以转换为:x=ai2⋅(2⋅p+1)x = \frac{a_i}{2} \cdot (2 \cdot p + 1)x=2ai​​⋅(2⋅p+1),即 xxx 一定是所有ai2\frac{a_i}{2}2ai​​的奇数倍。

令bi=ai2b_i = \frac{a_i}{2}bi​=2ai​​

我们把这个问题拆解成两部分,首先,xxx必须是所有bib_ibi​的倍数,也就是xxx是所有bib_ibi​的最小公倍数lcmlcmlcm的倍数。

然后是第二个条件,xxx还得是所有bib_ibi​的奇数倍才行。这里引入了两个条件,首先xxx必须是lcmlcmlcm的奇数被,其次,lcmlcmlcm必须是所有bib_ibi​的奇数倍。

我们可以这样判断:如果lcmlcmlcm除以每个bib_ibi​都是奇数,就说明可行。如果lcmlcmlcm除以某一个bib_ibi​得到了偶数,则直接输出0即可,因为xxx不可能是所有bib_ibi​的奇数倍。

编辑 (opens new window)
上次更新: 2025/04/15, 10:52:45
7月22日-ABC149
7月24日-ABC151

← 7月22日-ABC149 7月24日-ABC151→

最近更新
01
ubuntu安装g++显示已有但是输入g++又找不到命令
04-15
02
使用cloudflare-r2搭建webdav
04-08
03
LLM聚合平台客户端对比
03-29
更多文章>
Theme by Vdoing | Copyright © 2022-2025 PeaceSheep
冀ICP备2022004632号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式