牛牛现在有n个正整数的数组a,牛牛可以将其中的每个数a[i]都拆成若干个和为a[i]的正整数,牛牛想知道拆后(也可以一个都不拆)这个数组最多能有多少个素数。
输入描述: 第一行一个正整数n表示数组的长度 第二行n个正整数表示a[i]的值 1 <= n <= 1e6,1 <= a[i] <= 1e9
输出描述: 拆后数组最多的素数个数
示例1 输入 3 1 1 1 输出 0 说明:由于1不能再拆,并且1不是素数,所以拆后最多有0个素数
想拆成最多的素数,那么就得拆的素数最小,即2,3,;所以这道题的主要就是把每一个数都拆成 2,3尽可能的多
代码:
本来想着需要分情况讨论,元素是1就不加,元素是2、3就加1,否则就加上元素整除以2的除数。
但是后来发现根本不用,因为1 整除2等于0,2、3整除2还是1,所以直接用一行代码 元素//2就可以
'''
# 本来想着需要分情况讨论,元素是1就不加,元素是2、3就加1,否则就加上元素整除以2的除数。
# 但是后来发现根本不用,因为1 整除2等于0,2、3整除2还是1,所以直接用一行代码 元素//2就可以
n = int(input())
a = [int(item) for item in input().strip().split()]
count = 0
for i in range(n):
if a[i]==1:
continue
elif a[i] == 2 or a[i] == 3:
count += 1
else:
m = a[i] // 2
count += m
print(count)
'''
n = int(input())
a = [int(item) for item in input().strip().split()]
count = 0
for i in range(n):
count += a[i] // 2
print(count)
小易今天读了篇英语文章,他现在想从里面找出一个单词作为这篇文章的关键问,一个单词可以作为关键词当且仅当它在这篇文章中出现的频率不低语1%,现在他想知道有多少个不同的单词可以作为关键词。
一个单词出现的频率 = 这个单词出现的次数/这篇文章中单词总数
输入描述, 第一行一个正整数n,代表这篇文意的单词总数 接下来n行每行一个学符串,代表一个单词,单词仅由大小写英文字母组成 1 <= n <= 10^6 保证所有的字符串长度之和不超过10号 输出: 仅一行一个整数表示答案,
输入: 5 I I am a boy
输出: 4
考试过程中写的:只能过60%
我要被自己的蠢气死了!!
1% = 0.1?
1% = 0.01 啊啊啊大哥啊
这么简单的题目 我居然做不对!!
n = int(input())
d = {}
for i in range(n):
dc = input()
dc = dc.lower()
if dc not in d:
d[dc] = 1
else:
d[dc] += 1
count = 0
for item in d:
if d[item] / n >= 0.01: # 这里考试写的0.1 一直只通过60% 真的被气炸了
count += 1
print(count)
现在有n个人排队买票,已知是早上8点开始卖票,这几个人买票有两种方式:
第一种是每一个人都可以单独去买自己的票,第1个人花费a秒。
第二种是每一个人都可以选择和自己后面的人起买票,第i个人和第i+1个人共花费印秒。
最后一个人只能和前面的人起买票或单独买票。
由于卖票的地方想早些关门,所以他想知道他最早几点可以关门,请输出一个时间格式形如:08:00.40 am/pm。时间的数字要保持2位,若是上午结束,是am,下午结束是pm
输入描述:
第一行输入一个整数T,接下来对于每组测试数据:输入一个数n,代表有n个人买票。
接下来n个数,代表每一个人单独买票的时间a[i].
接下来n个数,代表每一个人和他前面那个人起买票需要的时间b[i]
1
1<=a[li]<=50
1<=b[1]<=50
输出:
对于每组数据,输出一个时间表示关门的时间
示例:
输入:
2
2
20 25
40
1
8
输出:
08:00:40 am
08:00:08 pm
考试过程中写的,错误百出,
大概思路是:
T = int(input())
for t in range(T):
n = int(input())
a = [int(item) for item in input().strip().split()]
b = [int(item) for item in input().strip().split()]
dp = [[0 for _ in range(3)] for _ in range(n)]
dp[0][0] = a[0]
dp[0][1] = a[0]
dp[0][2] = b[0]
for i in range(1,n-1):
dp[i][0] = dp[i-1][2]
dp[i][1] = min(dp[i-1][0],dp[i-1][1]) + a[i]
dp[i][2] = min(dp[i-1][0],dp[i-1][1]) + b[i]
dp[n-1][0] = dp[n-2][2]
dp[n-1][1] = min(dp[n-2][0],dp[n-2][1]) + a[n-1]
dp[n-1][2] = min(dp[n-2][0],dp[n-2][1]) + a[n-1]
ans = min(dp[n-1])
hour = ans // 3600 + 8
hour = str(hour)
hour = hour.rjust(2,'0')
mins = (ans % 3600) // 60
mins = str(mins)
mins = mins.rjust(2,'0')
miao = ans % 3600 % 60
miao = str(miao)
miao = miao.rjust(2,'0')
if int(hour) <= 12:
print(hour + ':' + mins + ':' + miao + ' '+ 'am')
else:
print(hour + ':' + mins + ':' + miao + ' ' + 'pm')
下来后和同学讨论了一下,同学的思路非常好,直接用一维数组就可以了。动态规划数组dp,dp[i]是前i个人完成排队的最小时间。每个人有两种选择,第一种自己买,第二种和前面一个人一起买,因为是前i个人,所以不考虑和后面那个人一起买的情况。
每次只需要考虑当前这个人,是和前面的人一起买,还是自己单独买,dp[i]取这两者的最小值
T = int(input())
for t in range(T):
n = int(input())
if n == 0:
print('08:00:00 am')
continue
elif n == 1:
ans = int(input())
else:
a = [int(item) for item in input().strip().split()]
b = [int(item) for item in input().strip().split()]
dp = [0 for _ in range(n + 1)]
dp[1] = a[0] # 第一个人前面没有人,所以只能自己买
for i in range(2, n + 1):
dp[i] = min(dp[i - 1] + a[i - 1], dp[i - 2] + b[i - 2]) # 要么单独自己买,要么和前面的人一起买
ans = dp[n]
hour = ans // 3600 + 8
mins = ans % 3600 // 60
miao = ans % 3600 % 60
if hour <= 12:
print(str(hour).rjust(2,'0') + ':' + str(mins).rjust(2,'0') + ':' + str(miao).rjust(2,'0') + ' ' + 'am')
else:
print(str(hour-12).rjust(2,'0') + ':' + str(mins).rjust(2,'0') + ':' + str(miao).rjust(2,'0') + ' ' + 'pm')