基础算法例题

char   4977 歌词改编

tmp = 'aeiou'
tmp2 = 'AEIOU'
#大写字母A的编号为:65,大写字母Z的编号为90,小
# 写字母a的编号为:97,小写字母z的编号为122;
# 大小写字母之间的编号相差32
t = int(input())
for t in range(t):
  s = input()
  ans = ''
  for i in s:
    if i in tmp:
      i = chr(ord(i)-32)
    elif i not in tmp2 and 65<=ord(i)<=90:
      i = chr(ord(i)+32)
    ans += i
  print(ans)

位移

通过位移运算将数字 𝑎a 变成数字 𝑏b 。左移和右移的运算规则为:逻辑左移,高位丢弃,低位补 0;逻辑右移,高位补 0,低位丢弃。如 0000100,逻辑左移 1 位为 0001000 ;逻辑右移 1 位为 0000010 。(需着重注意左移高位的变化)

import sys
input = sys.stdin.readline
t=int(input())
for i in range(t):
    a,b=map(int,input().split())
    if a==b or b==0 :
        print('Yes')
    else:
        a=str(bin(a))[2:]
        b=str(bin(b))[2:].strip('0')  #除去左右的0,lstrip,rstrip
        if b in a:
            print('Yes')
        else:
            print('No')
'''
因为bin(a)得到的是0b……, 因此需要把前两位给去掉也就是:
a = str(bin(a))[2:],只要b中的除去0的剩下部分是a的子集就可以了
'''

前缀和 # 3419 小郑的蓝桥平衡串

def get_presum(a):
    sum = [0]*len(a)
    sum[0] = a[0]
    for i in range(1,len(a)):
        sum[i] = sum[i-1] + a[i]
    return sum
def get_sum(sum,l,r):
    if l==0:
        return sum[r]
    else:
        return sum[r]-sum[l-1]

s = input()
a = []
for i in s:
    if i == 'L':
        a.append(1)
    if i == 'Q':
        a.append(-1)
sum = get_presum(a)
ans = 0
for l in range(len(a)):
    for r in range(l,len(a)):
        if get_sum(sum,l,r) == 0:
            ans = max(ans,r-l+1)
print(ans)

字典排序

n = int(input())
idx = {}
for i in range(n):
  a,b = map(int,input().split())
  idx[a]=b
print(idx)
idx = dict(sorted(idx.items(),key=lambda x:x[1]))
for x in idx.keys():
  print(x)

差分   3291 区间更新

while True:
  try:
     n , m = map(int,input().split())
     a = list(map(int,input().split()))
     diff = [0] * (n+1)  #差分列表 要比原列表多1
     diff[0] = a[0]
     for i in range(1,n):
       diff[i] = a[i]-a[i-1]
     for j in range(m):
       x,y,z=map(int,input().split())
       x -= 1
       y -= 1
       diff[x] += z
       diff[y+1] -= z
     a[0] = diff[0]
     for k in range(1,n):
       a[k] = a[k-1] + diff[k]
     print(' '.join(map(str,a)))
  except:
    break

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值