ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【思特奇杯·云上蓝桥-算法集训营】第二周

2022-01-15 11:32:25  阅读:196  来源: 互联网

标签:集训营 num queen 蓝桥 xy position line 云上 append


带分数

def add_grades(n):
    i = 1
    time = 0
    while i < n-1:
        grades = n - i
        for x in range(1,1000):
            denominator = x
            numerator = x * (n - i)
            ls = []
            for j in str(i):
                ls.append(int(j))
            for j in str(denominator):
                ls.append(int(j))
            for j in str(numerator):
                ls.append(int(j))
            if 0 not in ls and ls.count(1) == ls.count(2) == ls.count(3) == ls.count(4) == ls.count(5)\
                 == ls.count(6) == ls.count(7) == ls.count(8) == ls.count(9) == 1:
                time += 1
                #print(i,denominator,numerator)
                
        i += 1
 
    return time

n = int(input())
print(add_grades(n))

李白打酒

num = 0
def drink(jiu,dian,hua):
    if dian > 0:
        drink(jiu*2,dian-1,hua)
    if hua > 0:
        drink(jiu-1,dian,hua-1)
    if jiu==1 and dian==0 and hua==1:
        global num
        num += 1
    return num

print(drink(2,5,10))

第39级台阶

ls = []
for x in range(1,40):
    for y in range(1,20):
        num = x + 2 * y
        if num == 39 and (x+y) % 2 == 0:
            #print(x,y,x+y)
            ls.append((y,x+y))

def factor(m):
    if m == 1:
        return 1
    elif m > 1:
        return m * factor(m - 1)

def C(x,y):
    return factor(y)//(factor(x) * factor(y-x))

time = 0
for i in ls:
    time += C(i[0],i[1])
print(time)

穿越雷区

迷宫

import collections
f=open("maze.txt","r")
s=f.readlines()
position={}
for y_wall in range(0,32):
    position[(0,y_wall)]='1'
    position[(51,y_wall)]='1'
for x_wall in range(0,52):
    position[(x_wall,0)]='1'
    position[(x_wall,31)]='1'
y=1
for y_position in s:
    for xy_index in range(len(y_position)-1):
        position[(xy_index+1,y)]=y_position[xy_index]
    y=y+1
m_deque=collections.deque()
start=(1,1)
end=(50,30)
checked_position=[]
m_deque.append(start)
while m_deque:
    to_check_position=m_deque.popleft()
    if to_check_position not in checked_position:
        if to_check_position==end:
            print("ok!")
            break
        else:
            checked_position.append(to_check_position)
            up_position=(to_check_position[0],to_check_position[1]-1)
            down_position=(to_check_position[0],to_check_position[1]+1)
            left_position=(to_check_position[0]-1,to_check_position[1])
            right_position=(to_check_position[0]+1,to_check_position[1])
            if position.get(up_position)=="0" and up_position not in checked_position:
                m_deque.append(up_position)
            if position.get(down_position)=="0" and down_position not in checked_position:
                m_deque.append(down_position)     
            if position.get(left_position)=="0" and left_position not in checked_position:
                m_deque.append(left_position)
            if position.get(right_position)=="0" and right_position not in checked_position:
                m_deque.append(right_position)
all_line=checked_position+[end]
every_end=(end)
line=[]
line_dulr=[]
while every_end!=start:
    up_xy=(every_end[0],every_end[1]-1)
    down_xy=(every_end[0],every_end[1]+1)
    left_xy=(every_end[0]-1,every_end[1])
    right_xy=(every_end[0]+1,every_end[1])
    if position.get(up_xy)=="0" and up_xy in all_line:
        index=all_line.index(up_xy)
        all_line=all_line[:index]
        line.append(up_xy)
        line_dulr.append("D")
        every_end = up_xy 
    elif position.get(down_xy)=="0" and down_xy in all_line:
        index=all_line.index(down_xy)
        all_line=all_line[:index]
        line.append(down_xy)
        every_end=down_xy
        line_dulr.append("U")
    elif position.get(left_xy)=="0" and left_xy in all_line:
        index=all_line.index(left_xy)
        all_line=all_line[:index]
        line.append(left_xy)
        every_end=left_xy
        line_dulr.append("R")
    elif position.get(right_xy)=="0" and right_xy in all_line:
        index=all_line.index(right_xy)
        all_line=all_line[:index]
        line.append(right_xy)
        every_end=right_xy
        line_dulr.append("L")    
line_s=""
for i in line_dulr:
    line_s=line_s+i
print(line_s[::-1])

 跳马

m,n = map(int,input().split(','))
total = 0
def jump(r,c,a,b):
    global total
    if r<0 or r>m or c<0 or c>n:
        return
    elif r+a== m and c+b== n:
        total += 1
    jump(r+a,c+b,1,2)
    jump(r+a,c+b,1,-2)
    jump(r+a,c+b,2,1)
    jump(r+a,c+b,2,-1)

jump(0,0,0,0)
print(total)

路径之谜

未名湖边的烦恼 

import itertools
m,n = map(int,input().split(','))
ls = [1]*m + [-1]*n
def check(li):
    stack = []
    for i in li:
        if i == 1:
            stack.append(i)
        else:
            if stack == []:
                return False
            else:
                stack.pop()
    if sum(stack) >= 0:
        return True
    else:
        return False

need = set()
time = 0
for i in itertools.permutations(ls):
    need.add(i)

for m in need:
    if check(m):
        time += 1
print(time)

大臣的旅费

cnt=0
node=0
def dfs(v,k):   #进行dfs搜索
    global cnt
    global node
    global vis
    if k>cnt:
        cnt=k
        node=v
    for i in range(len(E[v])):
        if vis[E[v][i][0]]==False: #没访问过的点都进行一次dfs
            vis[E[v][i][0]]=True #进行标记
            dfs(E[v][i][0],k+E[v][i][1])
            vis[E[v][i][0]]=False #回溯
n=int(input())
E=[[]for i in range(n+1)]
vis=[False for i in range(n+1)]
for i in range(n-1):
    x,y,z=map(int,input().split())
    E[x].append((y,z))
    E[y].append((x,z)) #将各个点进行连接,用列表数组的方式进行
vis[1]=True
dfs(1,0)  #找到距离1最远的点node
vis[1]=False
cnt=0
vis[node]=True
dfs(node,0)  #从node出发,找到最远的点,就是所要求的最远距离
res=0
for i in range(1,cnt+1):
    res+=i+10
print(res)

2n皇后问题

nums = eval(input())
n = 0
list_empty = []
while n < nums:
    hang = [int(i) for i in input().split()]
    list_empty.append(hang)
    n +=1
def conflict(queen_list,new_queen,black=None):
    num = len(queen_list)
    try:
        col = black[num]
    except:
        pass
    try:
        if len(black) != 0:
            if new_queen == col:
                return True
    except:
        pass
    if list_empty[num][new_queen] == 0:
        return True
    for index,queen in enumerate(queen_list):
        if abs(new_queen-queen) in (0,num-index):
            return True

    return False


def queen(num, queen_list=[]):
    for new_queen in range(num):
        if not conflict(queen_list, new_queen):
            if len(queen_list) == num -1:
                yield [new_queen]

            else:
                for result in queen(num,queen_list+[new_queen]):
                    yield [new_queen]+result

black_queen = list(queen(nums))
def queen_white(num,black,queen_list=[]):
    for new_queen in range(num):
        if not conflict(queen_list,new_queen,black):
            if len(queen_list) == num -1:
                yield [new_queen]

            else:
                for result in queen_white(num,black,queen_list+[new_queen]):
                    yield [new_queen]+result
end_num = []
sum = 0
for black in black_queen:
    white_queens = list(queen_white(nums,black))
    if len(white_queens)==0:
        continue
    end_num.append(len(white_queens))


for i in end_num:
    sum +=i

print(sum)

标签:集训营,num,queen,蓝桥,xy,position,line,云上,append
来源: https://blog.csdn.net/weixin_55727579/article/details/122507593

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有