[ABC150-A]500日元硬币
题意
给定k枚500日元的硬币,判断是否大于等于x。
解法
直接定义两个变量k和x并输入,判断k×500是否大于等于x即可。
[ABC112-B]超过时间限制
题意
给定多条路线,每条路线i有一个费用ci和时间ti。求出在满足时间限制的情况下最小的回家费用。
解法
遍历所有的路线,如果满足时间限制,则判断费用是否比当前最小的还要小,如果是的话更新最小费用即可。
[ABC150-B]ABC计数
题意
判断给定字符串中有多少个子串为"ABC"。
解法
子串/连续子序列:要求连续
子序列:不要求连续
先定义一个ans=0
,然后枚举i从2到n−1,如果s[i-1]== 'A' && s[i] == 'B' && s[i+1] == 'C'
,则ans
加一。最后输出ans
即可。
[ABC150-C]计数顺序
题意
给定两个1到n的排列p和q,判断他们按照字典序全排列后的索引差值的绝对值。
解法
本题数据量较小,因此可以直接暴力枚举。
定义两个string类型变量输入,让p是较小的那一个,q是较大的那一个,从p开始迭代,一直到q走了多少步输出就可以。
c++函数:next_permutation( 起始位置,终止位置)
,可以让起始位置和终止位置之间的序列得到下一个排列,如果没有下一个序列返回false,否则返回true。
对于一个string类型变量来说,起始位置是s.begin()
,结束位置是s.end()
。
[ABC108-C]三角关系
题意
给定两个整数n,k,计算三元组(a,b,c)的数量。三元组满足a,b,c均小于n且,a+b,a+c,b+c都是k的倍数。
解法
考虑a,b,c都是k的倍数,一定是满足条件的,一共有(kn)3种可能。
另外的情况,假设a,b,c中有不是k的倍数的数字,如果k是奇数,可以证明a,b,c必定是k的倍数。因此只需要考虑k为偶数的情况。
剩下的情况里两个数字加起来为k,只有一种情况,就是三个数字都是2k的奇数倍的和。
[ABC108-C]三角关系
证明:
因为a+b,a+c都是k的倍数,因此b%k==c%k==temp。又因为b+c==k,因此temp+temp=2∗temp=k。即b和c除以k的余数都是2k,即他们都是2k的奇数倍。
如果有一个是偶数倍,则加起来一定会多一个2k,如果两个都是偶数,则包含在第一种情况里。
因此,如有k是偶数,答案还需要再加上[1,n]中 2k的奇数倍的个数,即(2kn−kn)
[ABC150-D]半公倍数
题意
给定一个长度为 n(1≤n≤105) 的数组a,且 ai 是偶数,求 [1,M] 有多少个 X 满足对任意 X=ai⋅(p+0.5) 成立。
解法
原来的公式可以转换为:x=2ai⋅(2⋅p+1),即 x 一定是所有2ai的奇数倍。
令bi=2ai
我们把这个问题拆解成两部分,首先,x必须是所有bi的倍数,也就是x是所有bi的最小公倍数lcm的倍数。
然后是第二个条件,x还得是所有bi的奇数倍才行。这里引入了两个条件,首先x必须是lcm的奇数被,其次,lcm必须是所有bi的奇数倍。
我们可以这样判断:如果lcm除以每个bi都是奇数,就说明可行。如果lcm除以某一个bi得到了偶数,则直接输出0即可,因为x不可能是所有bi的奇数倍。