赞
踩
- #等比数列求和,然后约分
- temp=pow(2,20)
- a=2*(temp-1)
- b=temp
-
- #求最大公约数
- def gcd(a,b):
- return gcd(b,a%b) if b!=0 else a
-
- number=gcd(a,b)
- print(str(a//number)+'/'+str(b//number))
- #判断闰年
- def isLeapYear(n):
- if (n%4==0 and n%100!=0) or (n%400==0):
- return True
- return False
-
- #计算一共有多少天
- total_day=0
- for i in range(1901,2001):
- if isLeapYear(i):
- total_day+=366
- else:
- total_day+=365
-
- #计算一共有多少周,就有多少个星期一
- print(total_day//7)
- matrix=[[0]*10 for i in range(10)]
- for i in range(10):
- matrix[i]=list(map(int,input().split()))
-
- sum=1
- #求乘积
- for i in range(10):
- for j in range(10):
- sum*=matrix[i][j]
- #求sum末尾有多少个0
- ans=0
- while sum!=0:
- a=sum%10
- if a==0:
- ans+=1
- sum//=10
- else:
- break
-
- print(ans)
- #数字的3^i*5^j*7^k分解
- count=0
- n=59084709587505
-
- for i in range(30):
- for j in range(30):
- for k in range(30):
- if pow(3,i)*pow(5,j)*pow(7,k)<=n:
- count+=1
- #排除i=j=k=0情况
- print(count-1)
标题:航班时间
【问题背景】
小h前往美国参加了蓝桥杯国际赛。小h的女朋友发现小h上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。
小h对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有12小时时差,故飞机总共需要14小时的飞行时间。
不久后小h的女朋友去中东交换。小h并不知道中东与北京的时差。但是小h得到了女朋友来回航班的起降时间。小h想知道女朋友的航班飞行时间是多少。
【问题描述】
对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相同,求飞机的飞行时间。
【输入格式】
从标准输入读入数据。
一个输入包含多组数据。
输入第一行为一个正整数T,表示输入数据组数。
每组数据包含两行,第一行为去程的 起降 时间,第二行为回程的 起降 时间。
起降时间的格式如下
h1:m1:s1 h2:m2:s2
或
h1:m1:s1 h3:m3:s3 (+1)
或
h1:m1:s1 h4:m4:s4 (+2)
表示该航班在当地时间h1时m1分s1秒起飞,
第一种格式表示在当地时间 当日 h2时m2分s2秒降落
第二种格式表示在当地时间 次日 h3时m3分s3秒降落。
第三种格式表示在当地时间 第三天 h4时m4分s4秒降落。
对于此题目中的所有以 h:m:s 形式给出的时间, 保证 ( 0<=h<=23, 0<=m,s<=59 ).
【输出格式】
输出到标准输出。
对于每一组数据输出一行一个时间hh:mm:ss,表示飞行时间为hh小时mm分ss秒。
注意,当时间为一位数时,要补齐前导零。如三小时四分五秒应写为03:04:05。
【样例输入】
3
17:48:19 21:57:24
11:05:18 15:14:23
17:21:07 00:31:46 (+1)
23:02:41 16:13:20 (+1)
10:19:19 20:41:24
22:19:04 16:41:09 (+1)
【样例输出】
04:09:05
12:10:39
14:22:05
- #设输入的每组数据为
- #a b
- #c d
- #设航班飞行时间是Time,时差是T
- #则有:
- #a+Time=b-T
- #c+Time=d+T
- #联立解Time
- #处理时间一般是转换为秒方便计算
-
- #分割读入的字符串
- import re
- #数据组数
- t=int(input())
- #去程和回程总时间
- total_time=0
- for i in range(t):
- total_time=0
- string=input()
- #去程起降时间
- time_list=re.split('\s+|:',string)
-
- #计算去程所用秒数
- #当日降落
- if len(time_list)==6:
- total_time+=int(time_list[3])*3600+int(time_list[4])*60+int(time_list[5])-(int(time_list[0])*3600+int(time_list[1])*60+int(time_list[2]))
- #非当日降落
- else:
- total_time+=int(time_list[6][2])*24*3600+int(time_list[3])*3600+int(time_list[4])*60+int(time_list[5])-(int(time_list[0])*3600+int(time_list[1])*60+int(time_list[2]))
-
- #回程起降时间
- string=input()
- time_list=re.split('\s+|:',string)
- if len(time_list)==6:
- total_time+=int(time_list[3])*3600+int(time_list[4])*60+int(time_list[5])-(int(time_list[0])*3600+int(time_list[1])*60+int(time_list[2]))
- else:
- total_time+=int(time_list[6][2])*24*3600+int(time_list[3])*3600+int(time_list[4])*60+int(time_list[5])-(int(time_list[0])*3600+int(time_list[1])*60+int(time_list[2]))
-
- total_time//=2
- #输出结果
- ans=''
- #注意python中的除法
- h=total_time//3600
- m=total_time//60%60
- s=total_time%60
-
- if h<10:
- ans+='0'
- ans+=str(h)
- ans+=':'
- else:
- ans+=str(h)
- ans+=':'
-
- if m<10:
- ans+='0'
- ans+=str(m)
- ans+=':'
- else:
- ans+=str(m)
- ans+=':'
-
- if s<10:
- ans+='0'
- ans+=str(s)
- else:
- ans+=str(s)
-
- print(ans)
标题:三体攻击
【题目描述】
三体人将对地球发起攻击。为了抵御攻击,地球人派出了 A × B × C 艘战舰,在太空中排成一个 A 层 B 行 C 列的立方体。其中,第 i 层第 j 行第 k 列的战舰(记为战舰 (i, j, k))的生命值为 d(i, j, k)。
三体人将会对地球发起 m 轮“立方体攻击”,每次攻击会对一个小立方体中的所有战舰都造成相同的伤害。具体地,第 t 轮攻击用 7 个参数 lat, rat, lbt, rbt, lct, rct, ht 描述;
所有满足 i ∈ [lat, rat],j ∈ [lbt, rbt],k ∈ [lct, rct] 的战舰 (i, j, k) 会受到 ht 的伤害。如果一个战舰累计受到的总伤害超过其防御力,那么这个战舰会爆炸。
地球指挥官希望你能告诉他,第一艘爆炸的战舰是在哪一轮攻击后爆炸的。
【输入格式】
从标准输入读入数据。
第一行包括 4 个正整数 A, B, C, m;
第二行包含 A × B × C 个整数,其中第 ((i − 1)×B + (j − 1)) × C + (k − 1)+1 个数为 d(i, j, k);
第 3 到第 m + 2 行中,第 (t − 2) 行包含 7 个正整数 lat, rat, lbt, rbt, lct, rct, ht。
【输出格式】
输出到标准输出。
输出第一个爆炸的战舰是在哪一轮攻击后爆炸的。保证一定存在这样的战舰。
【样例输入】
2 2 2 3
1 1 1 1 1 1 1 1
1 2 1 2 1 1 1
1 1 1 2 1 2 1
1 1 1 1 1 1 2
【样例输出】
2
【样例解释】
在第 2 轮攻击后,战舰 (1,1,1) 总共受到了 2 点伤害,超出其防御力导致爆炸。
- #按照题目进行模拟
- A,B,C,m=map(int,input().split())
- #战舰生命值列表
- life_list=list(map(int,input().split()))
- #战舰生命值和编号映射
- d={}
-
- #建立生命值和编号映射
- for i in range(1,A+1):
- for j in range(1,B+1):
- for k in range(1,C+1):
- d[(i,j,k)]=life_list[((i-1)*B+(j-1))*C+(k-1)]
-
- print(d)
- flag=False
- #进行战舰攻击模拟
- for times in range(1,m+1):
- number_list=list(map(int,input().split()))
- li=number_list[0]
- ri=number_list[1]
- lj=number_list[2]
- rj=number_list[3]
- lk=number_list[4]
- rk=number_list[5]
- #遍历战舰集合,进行生命值更新
- for key in d.keys():
- if li<=key[0]<=ri and lj<=key[1]<=rj and lk<=key[2]<=rk:
- d[key]-=number_list[6]
- #按照题意是生命值小于0算作爆炸
- if d[key]<0:
- print(times)
- flag=True
- break
- if flag:
- break
标题:倍数问题
【题目描述】
众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 n 个数,希望你从这 n 个数中找到三个数,使得这三个数的和是 K 的倍数,且这个和最大。数据保证一定有解。
【输入格式】
从标准输入读入数据。
第一行包括 2 个正整数 n, K。
第二行 n 个正整数,代表给定的 n 个数。
【输出格式】
输出到标准输出。
输出一行一个整数代表所求的和。
【样例入】
4 3
1 2 3 4
【样例输出】
9
【样例解释】
选择2、3、4。
- n,k=map(int,input().split())
- number_list=list(map(int,input().split()))
-
- #最大值
- max_value=-10**10
- #当前数字是否已经被遍历
- has_checked=[]
- #深度优先搜索
- def dfs(temp_sum,count):
- global max_value
- if count==3:
- max_value=max(max_value,temp_sum)
- return
- for i in range(len(number_list)):
- if i not in has_checked:
- has_checked.append(i)
- dfs(temp_sum+number_list[i],count+1)
- #试探结束后回退,进行下一次试探
- has_checked.remove(i)
- dfs(0,0)
- print(max_value)
标题:第几天
2000年的1月1日,是那一年的第1天。
那么,2000年的5月4日,是那一年的第几天?
:31+29+31+30+4
标题:明码
汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。
16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。
一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。
把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,
一共16行,布局是:
第1字节,第2字节
第3字节,第4字节
....
第31字节, 第32字节
这道题目是给你一段多个汉字组成的信息,每个汉字用32个字节表示,这里给出了字节作为有符号整数的值。
题目的要求隐藏在这些信息中。你的任务是复原这些汉字的字形,从中看出题目的要求,并根据要求填写答案。
这段信息是(一共10个汉字):
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 16
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
0 -128 64 -128 48 -128 17 8 1 -4 2 8 8 80 16 64 32 64 -32 64 32 -96 32 -96 33 16 34 8 36 14 40 4
4 0 3 0 1 0 0 4 -1 -2 4 0 4 16 7 -8 4 16 4 16 4 16 8 16 8 16 16 16 32 -96 64 64
16 64 20 72 62 -4 73 32 5 16 1 0 63 -8 1 0 -1 -2 0 64 0 80 63 -8 8 64 4 64 1 64 0 -128
0 16 63 -8 1 0 1 0 1 0 1 4 -1 -2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 5 0 2 0
2 0 2 0 7 -16 8 32 24 64 37 -128 2 -128 12 -128 113 -4 2 8 12 16 18 32 33 -64 1 0 14 0 112 0
1 0 1 0 1 0 9 32 9 16 17 12 17 4 33 16 65 16 1 32 1 64 0 -128 1 0 2 0 12 0 112 0
0 0 0 0 7 -16 24 24 48 12 56 12 0 56 0 -32 0 -64 0 -128 0 0 0 0 1 -128 3 -64 1 -128 0 0
- #每一行代表了一个汉字
- #每一行有32个数字,代表了32个字节
- #两个字节排成一行
- #将每个数字转换为二进制补码,
- #如果是0输出空格
- #是1输出*
- #最终可显示所有的汉字图形
- n=10
- m=32
- matrix=[[0]*m for i in range(n)]
-
- #将十进制数字转换为8位二进制补码
- def intToBin8(i):
- return (bin(((1 << 8) - 1) & i)[2:]).zfill(8)
-
- for i in range(n):
- matrix[i]=list(map(int,input().split()))
-
- for i in range(n):
- count=0
- for j in range(m):
- #按照字节处理
- part=intToBin8(matrix[i][j])
- for item in part:
- if item=='0':
- print(' ',end='')
- if item=='1':
- print('* ',end='')
- count+=1
- #两个字节为一层
- if count%2==0:
- print()
- #处理完了一个汉字
- print()
标题:测试次数
x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。
各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。
x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。
如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。
特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。
如果到了塔的最高层第n层扔没摔坏,则耐摔指数=n
为了减少测试次数,从每个厂家抽样3部手机参加测试。
某次测试的塔高为1000层,如果我们总是采用最佳策略,在最坏的运气下最多需要测试多少次才能确定手机的耐摔指数呢?
请填写这个最多测试次数。
注意:需要填写的是一个整数,不要填写任何多余内容。
- #动态规划
- dp=[[0]*1001 for i in range(4)]
- #dp[i][j]代表共有i部手机,j层的最坏运气下最多测试次数
- #先初始化为层数
- for i in range(1,4):
- for j in range(1,1001):
- dp[i][j]=j
- #在第k层摔手机分为两种情况
- #1.没有摔坏,向楼上走,去剩余的j-k层测试,则dp[i][j]=dp[i][j-k]+1,+1是因为此次没有摔坏
- #2.摔坏了,向楼下走,手机数量-1,去剩下的k-1层测试 dp[i][j]=dp[i-1][k-1]
- #综上在第k层dp[i][j]=max(dp[i][j-k]+1,dp[i-1][k-1]),max是保证两种情况都能发生
- #则总的转移方程为dp[i][j]=min(dp[i][j],max(dp[i][j-k]+1,dp[i-1][k-1])),1<=k<j,k取
- #不同的值代表在不同的层进行摔手机尝试
- for i in range(2,4):
- for j in range(1,1001):
- for k in range(1,j):
- dp[i][j]=min(dp[i][j],max(dp[i][j-k]+1,dp[i-1][k-1]))
-
- print(dp[3][1000])
标题:递增三元组
给定三个整数数组
A = [A1, A2, ... AN],
B = [B1, B2, ... BN],
C = [C1, C2, ... CN],
请你统计有多少个三元组(i, j, k) 满足:
1. 1 <= i, j, k <= N
2. Ai < Bj < Ck
【输入格式】
第一行包含一个整数N。
第二行包含N个整数A1, A2, ... AN。
第三行包含N个整数B1, B2, ... BN。
第四行包含N个整数C1, C2, ... CN。
对于30%的数据,1 <= N <= 100
对于60%的数据,1 <= N <= 1000
对于100%的数据,1 <= N <= 100000 0 <= Ai, Bi, Ci <= 100000
【输出格式】
一个整数表示答案
【样例输入】
3
1 1 1
2 2 2
3 3 3
【样例输出】
27
- ans=0
- number_list1=[]
- number_list2=[]
- number_list3=[]
- n=int(input())
- number_list1=list(map(int,input().split()))
- number_list2=list(map(int,input().split()))
- number_list3=list(map(int,input().split()))
- for i in range(n):
- for j in range(n):
- for k in range(n):
- if number_list1[i]<number_list2[j]<number_list3[k]:
- ans+=1
-
- print(ans)
标题:日志统计
小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:
ts id
表示在ts时刻编号id的帖子收到一个"赞"。
现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。
具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。
给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。
【输入格式】
第一行包含三个整数N、D和K。
以下N行每行一条日志,包含两个整数ts和id。
对于50%的数据,1 <= K <= N <= 1000
对于100%的数据,1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000
【输出格式】
按从小到大的顺序输出热帖id。每个id一行。
【输入样例】
7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3
【输出样例】
1
3
- #日志id集合
- id_set=set()
- #每个id的点赞时间
- id_time_list=[[]*100001 for i in range(100001)]
- n,d,k=map(int,input().split())
- #判断id的日志是否是热帖
- def isHot(id):
- global n,d,k
- total_number=len(id_time_list[id])
- if total_number<k:
- return False
- id_time_list[id].sort()
- #sum是时间[l,r)内的点赞数量
- l,r,sum=0,0,0
- while l<=r<total_number:
- sum+=1
- if sum>=k:
- if id_time_list[id][r]<d+id_time_list[id][l]:
- #点赞数量大于k,并且时间间隔小于d
- return True
- else:
- #取下一个时间段
- sum-=1
- l+=1
- r+=1
-
- for i in range(n):
- time,id=map(int,input().split())
- id_set.add(id)
- id_time_list[id].append(time)
-
- for i in id_set:
- if isHot(i):
- print(i)
标题:哪天返回
小明被不明势力劫持。后莫名其妙被扔到x星站再无问津。小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文。
他决定在x星战打工。好心的老板答应包食宿,第1天给他1元钱。
并且,以后的每一天都比前一天多2元钱,直到他有足够的钱买票。
请计算一下,小明在第几天就能凑够108元,返回地球。
要求提交的是一个整数,表示第几天。请不要提交任何多余的内容。
- day=1
- money=1
- sum=1
- while sum<108:
- money+=2
- day+=1
- sum+=money
- print(day)
标题:猴子分香蕉
5只猴子是好朋友,在海边的椰子树上睡着了。这期间,有商船把一大堆香蕉忘记在沙滩上离去。
第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉。
第2只猴子醒来,重新把香蕉均分成5堆,还剩下2个,就吃掉并把自己的一份藏起来继续睡觉。
第3只猴子醒来,重新把香蕉均分成5堆,还剩下3个,就吃掉并把自己的一份藏起来继续睡觉。
第4只猴子醒来,重新把香蕉均分成5堆,还剩下4个,就吃掉并把自己的一份藏起来继续睡觉。
第5只猴子醒来,重新把香蕉均分成5堆,哈哈,正好不剩!
请计算一开始最少有多少个香蕉。
需要提交的是一个整数,不要填写任何多余的内容。
- #香蕉的数量,迭代尝试解
- banana_number=5
- monkey1,monkey2,monkey3,monkey4,monkey5=0,0,0,0,0
- #寻找满足条件的解
- while True:
- banana_number+=1
- monkey1=banana_number
- if monkey1%5==1 and monkey1>1:
- monkey2=(monkey1-1)//5*4
- if monkey2%5==2 and monkey2>2:
- monkey3=(monkey2-2)//5*4
- if monkey3%5==3 and monkey3>3:
- monkey4=(monkey3-3)//5*4
- if monkey4%5==4 and monkey4>4:
- monkey5=(monkey4-4)//5*4
- if monkey5%5==0 and monkey5>0:
- break
-
- print(banana_number)
标题:次数差
x星球有26只球队,分别用a~z的26个字母代表。他们总是不停地比赛。
在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。
国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?(当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)
输入,一个串,表示球队获胜情况(保证串的长度<1000)
要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。
比如:
输入:
abaabcaa
则程序应该输出:
4
解释:a出现5次,最多;c出现1次,最少。5-1=4
再比如:
输入:
bbccccddaaaacccc
程序应该输出:
6
- char_set={}
- string=input()
- for i in string:
- if i not in char_set:
- char_set[i]=1
- else:
- char_set[i]+=1
- max_value=-10**10
- min_value=10**10
- for item in char_set.values():
- if item>max_value:
- max_value=item
- if item<min_value:
- min_value=item
- print(max_value-min_value)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。