A 题
链接:
http://codeforces.com/contest/805/problem/A
解题思路:
如果两个数相同,那么他们出现次数最多的公因子选择他们俩的任意因子即可,本题中,选择输出他们自己。如果两个数不相同,那么这两个数之间的所有的数(包含这俩数),出现次数最多的公因子肯定是2,因为2是每隔1个数就出现一次,3是每隔两个数出现一次,依次类推
代码:
a,b = input().split()
if a == b:
print(a)
else:
print(2)
B 题
链接:
http://codeforces.com/contest/805/problem/B
解题思路:
题目要求字符串中,所有长度为3的子串不能是回文的,并且要求c出现的次数最少。那么我们就让c出现的次数为0。当长度为1和2的时候随便输出a,b的组合都不是回文,我们为了方便统一输出a,aa,当长度为3的时候,肯定不能输出aaa,这样会导致aaa是回文的,所以我们输出aab,长度为4的时候,前3个aab已经保证不是回文的了,只要保证后三个abX不是回文的就行,我们选择第四个为b,所以长度为4的时候,输出aabb,长度为5的时候输出aabba,已经形成了循环,规律出现,输出的字符串是aabb的循环。
代码:
n = int(input())
arr=['a','a','b','b']
res = ''
for i in range(n):
res+=arr[i%4]
print(res)
C 题
链接:
http://codeforces.com/contest/805/problem/C
解题思路:
这道题可以寻找规律,当输入的数字是偶数的时候,输出这个数的一半减去1,当输入的数字是奇数的时候,输出的数字是这个数减去1除以2。答案是找规律找出来的。
代码:
n = int(input())
if n % 2 == 0:
print(int(n/2-1))
else:
print(int((n-1)/2))
D 题
链接:
http://codeforces.com/contest/805/problem/D
解题思路:
这道题从后向前遍历字符串,遇到b就让b的个数加一,遇到a就先让结果加上b的个数,然后让b的个数乘以2。
代码:
s = input()
res = 0
# 记录b的个数
b_cnt = 0
mod= 10**9+7
for c in s[::-1]:
if c == 'b':
b_cnt+=1
else:
res+=b_cnt
b_cnt*=2
res%=mod
b_cnt%=mod
print(res)
E 题
暂时不会
F 题
暂时不会
网友评论