枚举算法 openjudge 百练 python_zzz的学习笔记本的博客-程序员秘密

技术标签: 算法  

https://www.icourse163.org/learn/PKU-1001894005?tid=1450413466#/learn/content
程序设计与算法(二)算法基础

2810:完美立方

# 2810:完美立方
# http://bailian.openjudge.cn/practice/2810/
# b<=c<=d
inputNum = input()
# 2,...,int(inputNum)
for a in range(2, int(inputNum) + 1):
    for b in range(2, a):
        for c in range(b, a):
            for d in range(c, a):
                if a*a*a == b*b*b + c*c*c + d*d*d:
                    print("Cube = %d, Triple = (%d,%d,%d)" % (a, b, c, d))

4148:生理周期

# 4148:生理周期
# http://bailian.openjudge.cn/practice/4148

count = 1
while True:
    p, e, i, d = [int(s) for s in input().split()]
    if d == -1:
        break

    #第一次高峰出现的时间
    p = p % 23
    e = e % 28
    i = i % 33
    # print(p, e, i)
    
#     所求的时间<=21252
    for day in range(i, d + 21252 + 1, 33):  #在[i, d + 21252]区间内找最小的i + 33 *n
        if day % 23 == p and day % 28 == e:
            if day <= d:
                day += 21252  #题目要求在给定时间d之后的某一天
            print("Case %d: the next triple peak occurs in %d days." % (count, day - d))
#             从给定时间起,下一次三个高峰同一天的时间(距离给定时间的天数)。
            break

    count += 1

2692:假币问题

# 2692:假币问题
# http://bailian.openjudge.cn/practice/2692

def IsFake(cc,light,leftside,rightside,result):
    for ii in range(0, 3):
#         如果假设假币cc是轻的
        if light:
            sleft = leftside[ii]
            sright = rightside[ii]
#         如果假设假币cc是重的
        else:
            sleft = rightside[ii]
            sright = leftside[ii]
        if result[ii] == 'up': # 右端高
            if sright.find(cc) == -1: # 如果假设假币cc不在右边,那么假设假币cc不是轻的
                return False
        elif result[ii] == 'even': # 平衡
            if sright.find(cc)!=-1 or sleft.find(cc)!=-1:
                return False
        elif result[ii] == 'down': # 右端低
            if sleft.find(cc) == -1: # 如果假设假币cc不在左边,那么假设假币cc不是轻的
                return False
    return True


leftside = ['left', 'left', 'left']
rightside = ['righ', 'righ', 'righ']
result = ['resu', 'resu', 'resu']

# 第一行有一个数字n,表示有n组测试用例
num = int(input())
# print(num)
while num > 0:
    for ii in range(0, 3):
        leftside[ii], rightside[ii], result[ii] = [s for s in input().split()]
    for cc in [chr(i) for i in range(65,77)]:
        if IsFake(cc,True,leftside,rightside,result):
            print("%c is the counterfeit coin and it is light." % cc)
            break
        elif IsFake(cc,False,leftside,rightside,result):
            print("%c is the counterfeit coin and it is heavy." % cc)
            break
    
    num -= 1




2811:熄灯问题

# 2811:熄灯问题
# http://bailian.openjudge.cn/practice/2811/

def guess():
    #根据press的第一行和puzzle的第一行,确定press其他行的值
    for r in range(1, num_row):
        for c in range(1, num_col + 1):
            #             如果puzzle[r][c]原来就是1或者被它上左右的按钮按成了1,那么要求press[r + 1][c]=1
            press[r + 1][c] = (puzzle[r][c] + press[r][c] + press[r - 1][c] +
                               press[r][c - 1] + press[r][c + 1]) % 2

    for c in range(1, num_col + 1):
        #         如果最后一行的puzzle[num_row][c]上左右的按钮press未能将其熄灭,那么此次枚举失败
        if (press[num_row][c - 1] + press[num_row][c] + press[num_row][c + 1] +
                press[num_row - 1][c]) % 2 != puzzle[num_row][c]:
            return 0  # 失败
    return 1  # 成功


# 枚举第一行按下开关的所有可能性,有2^num_col个
# def enumeration():
#     while guess() == 0: # 如果枚举失败,那么继续枚举
#         press[1][1] += 1
#         col = 1
#         while (press[1][col] > 1):
#             press[1][col] = 0
# #             枚举下一列
#             col += 1
#             press[1][col] += 1
#         continue


# 枚举第一行按下开关的所有可能性,有2^num_col个
def enumeration():
    state = 0
    while guess() == 0:  # 如果枚举失败,那么继续枚举
        state_ = state
        for jj in range(1, num_col + 1):
            press[1][jj] = state_ % 2
            state_ = state_ // 2
        state += 1
        continue


num_row = 5
num_col = 6
line = [[0] * (num_col + 2)] * (num_row + 1)
line[0] = [0] * (num_col + 2)
for i in range(1, num_row + 1):
    # line[i]=input("请输入第"+str(i)+"行:").split(' ')
    inputline = input().split(' ')
    #将line中的元素转换为整型
    inputline = list(map(int, inputline))
    inputline.insert(0, 0)
    inputline.insert(num_col + 1, 0)
    line[i] = inputline
puzzle = line
press = [[0 for col in range(num_col + 2)]
         for row in range(num_row + 1)]  # (num_row+1)*(num_col+2)  不要写反

enumeration()
for ii in range(1, num_row + 1):
    for jj in range(1, num_col + 1):
        if jj == num_col:
            print("%d" % press[ii][jj])
        else:
            print("%d " % press[ii][jj], end="")
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42806204/article/details/119702570

智能推荐

最近邻查找算法kd-tree_chuange6363的博客-程序员秘密

http://blog.csdn.net/pipisorry/article/details/52186307 海量数据最近邻查找的kd-tree简介 利用Octree,為封閉的3D空間建立一個資料結構來管理空間中的每個元素。如此我們可以在 O(log N) 的時間內對這3D空間進行搜尋。...

详解HTTP中GET与POST的区别,不是你看过的标准答案!_weixin_33690367的博客-程序员秘密

防吐槽声明:本文适合程序员新人,自认阅文无数、技术超叼的大神不用看。GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中...

POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治_weixin_30902251的博客-程序员秘密

The Pilots Brothers' refrigeratorTime Limit:1000MSMemory Limit:65536KTotal Submissions:22286Accepted:8603Special JudgeDescriptionThe game “The ...

微信小程序 赋值 和刷新页面赋值_小程序 重新赋值会刷新页面吗_明耀的博客-程序员秘密

this.user = app.globalData.user; this.setData({ user: this.user });只setData不能赋值

mysql中Table is read only的解决方法_weixin_34090643的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

Cobbler部署指南之配置管理篇[下文]_pxe_menu_items_紫心雪莲_ywt的博客-程序员秘密

《Cobbler部署指南》系列1、《Cobbler部署指南之安装篇》http://dreamway.blog.51cto.com/blog/1281816/11665892、《Cobbler部署指南之配置管理篇[上文]》http://dreamway.blog.51cto.com/blog/1281816/11669213、《Cobbler部署指南之配置管理篇[下文]》http:/

随便推点

#Java实现二维码登录_当风爱上雨的博客-程序员秘密

二维码登录的流程:1)用户选择二维码登录;前端发送获取二维码请求,服务器收到请求后生成一个uuid(用于绑定二维码),然后根据指定网址和uuid生成对应的二维码,将uuid作为key,一个对应的code(生成二维码成功)作为value存入Redis,再将生成二维码流返回给前端展示。前端成功获取二维码后开始两秒一次轮询后端接口,直到登录成功或二维码超时(当然也包括关闭页面)这里使用的是Redis集群模板:@Resourceprivate RedisClusterTemplate jedis;

vue中定义全局过滤器_vue全局过滤器没有生效_苏醒!的博客-程序员秘密

全局过滤器的作用:格式化文本padStart(arg1,arg2):es6新增的方法,arg1指的是当前数值的位数,arg2当位数不够时,在前面补上什么vue的全局过滤器是通过管道符(|)进行格式化的,一个两个参数,参数1指向格式化的字符串,参数2指定格式化的函数&lt;div id="app"&gt; &lt;p&gt;{{msg|dataFormat}}&lt;/p&gt; &...

Linux中的jmeter如何运行本地jmeter中的csv data set config_不正经的程序员cc的博客-程序员秘密

在本地设置csv的相关信息能在本地上跑的通,但是会发现将本地的jmx文件上传到服务器上却无法正常的运行会出现无法正常的运行一秒结束的情况这就是csv data set comfig中的配置没有更改而造成的,因为所读取的账户信息的文件还在电脑本地,服务器读取不了,且jmx文件的读取账户信息文本的路径未修改这样做首先:将本地的账户信息文件上传至服务器上修改服务器上jmx文件的csv路径将路径改为上传后账户信息文件的位置运行即可在下小白一枚,在不断的进步,如果做的不好,望大家见谅。记录.

在IDEA中maven工程中父工程不显示的解决办法_小王要认真!的博客-程序员秘密

在模块目录中父工程没有显示,在右边的maven工程中父工程的也变灰了我出现这个的原因是在设置中把父工程忽略掉了导致父工程不显示,去掉勾就恢复了父工程

node - 写返回mime类型_weixin_34166847的博客-程序员秘密

何为mime类型?  mime.json { &quot;.323&quot;:&quot;text/h323&quot; , &quot;.3gp&quot;:&quot;video/3gpp&quot; , &quot;.aab&quot;:&quot;application/x-authoware-bin&quot; , &quot;.aam&quot;:&quot;application/x-authoware-map&quot; , &quot;

推荐文章

热门文章

相关标签