1.读取未给出行列数的矩阵
时间限制: 3000MS
内存限制: 589824KB
题目描述:
【输入问题】在考试时,有些时候没有给出数据的行数n,对于矩阵,可能行数n和列数m都未给出,本题就是为了训练这类题目的输入。(做题前可以先阅读:https://labfiles.acmcoder.com/ojhtml/index.html#/?id=%e6%b2%a1%e6%9c%89%e7%bb%99%e5%87%ba%e7%9f%a9%e9%98%b5%e7%9a%84%e8%a1%8c%e5%88%97%e6%95%b0)
对于给定的一个二维矩阵,请转置后进行输出。
#!/usr/bin/env python
# coding=utf-8
arr = []
while 1:
s = input()
if s != "":
arr.append(list(map(int, s.split())))
else:
break
n=len(arr)
m=len(arr[0])
for j in range(m):
for i in range(n):
print(arr[i][j],end=' ')
print('\n')
2.打字
时间限制: 3000MS
内存限制: 589824KB
题目描述:
小明很喜欢打字,今天小红给了小明一个字符串。
这个字符串只包含大写和小写字母。
我们知道,按下CapsLock键,可以切换大小写模式。
我们在小写模式时候,同时按下shift+字母键,就能写出大写字母。
在大写模式的时候,按下shift+字母键,就能写出小写字母。
现在问题来了,给你一个字符串,问你最少使用多少个按键,就可以写出这个字符串呢?
注意,按shift和字母键,算两次按键。开始时均为小写状态。
样例输入
3
A
AA
AAAAAA
样例输出
2
3
7
很奇怪,明明觉得自己思路都是对的,但为什么正确率只有9%啊?是哪里出了问题
def fun_3(s):
flag=0 #表示此时属于小写状态
cnt=0
for i in range(len(s)):
if s[i]>='A' and s[i]<='Z':
if flag==0:
if i+1<len(s):
if s[i+1]>='A' and s[i+1]<='Z':
cnt+=2
flag=1
else:
cnt+=2
else:
cnt+=2
else:
cnt+=1
elif s[i]>='a' and s[i]<='z':
if flag==0:
cnt+=1
else:
if i+1<len(s):
if s[i+1]>='a' and s[i+1]<='z':
cnt+=2
flag=0
else:
cnt+=2
else:
cnt+=2
else:
cnt+=1
return cnt
n=int(input())
for i in range(n):
s=input()
print(fun_3(s))
状态转移的写法
def fun(s):
dp=[[0 for i in range(len(s))] for i in range(2)]
for i in range(len(s)):
if s[i]>='a' and s[i]<='z':
if i==0:
dp[0][i]=1
dp[1][i]=2
else:
dp[0][i]=min(dp[0][i-1]+1,dp[1][i-1]+2)
dp[1][i]=min(dp[0][i-1]+2,dp[1][i-1]+2)
else:
if i==0:
dp[0][i]=2
dp[1][i]=2
else:
dp[0][i]=min(dp[0][i-1]+2,dp[1][i-1]+2)
dp[1][i]=min(dp[0][i-1]+2,dp[1][i-1]+1)
for i in dp:print(i)
return min(dp[0][-1],dp[1][-1])
3.Manager
时间限制: 3000MS
内存限制: 589824KB
题目描述:
小明是一个互联网公司的老板,需要招聘员工。现在有k个学校的学生前来应聘。
由于特殊原因,要求最后入职的员工学校的人数应该都不一样。
比如我们可以A大学录取5人,B大学录取4人。但是不允许A大学和B大学都录取5人。
请问最后最多录取多少人呢?
正确率67%,不知道为啥
n=int(input())
li=list(map(int,input().split()))
li.sort(reverse=True)
ans=li[0]
tmp=li[0]
for i in range(1,n):
ans+=min(tmp-1,li[i])
tmp=min(tmp-1,li[i])
print(ans)