[USACO | Python] 201602B2 Circular Barn

作为当代建筑的粉丝,农民约翰(John)建造了一个完美圆形的新谷仓。在里面,谷仓由n环组成房间,从1…n的顺时针方向编号。房间的有n个(1<= n <= 1000)。每一间房间都有三扇门,两扇分别通往临近的房间,一扇通往谷仓的外面。


Farmer John 想要有准确的 ri 头牛在房间 r 中(1<= ri <= 100), 他打开了某一个房间通往谷仓外面的门,并让母牛门按照顺时针方向进入到谷仓中直到她们遇到了一个舒适的地方。Farmer John 想要他的奶牛们使用最短的路程走到房间内,请确认最小的距离这些奶牛们需要走。距离就是单头奶牛穿过内部的门的数量。

输入格式(file cbarn.in):

第一行包含 n,剩下的n行每一行包含一个 ri

输出格式(file cbarn.out):


请写出最小的距离

输入样例:

5
4
7
8
6
4

输出样例:

48

在这个例子中,最好的解就是让牛从需要7头牛的门进去


 

USACO

这里是原文地址,中文为我手翻,如果有不准确的地方勿喷

=====Analysis=====

这是一道比较简单的模拟题,其中需要模拟的部分题目也写的非常清楚了

这里可以直接枚举+模拟

枚举从所有门进的可能,然后枚举的单个内再进行模拟,最后取步数最小的门即可

=====Code=====

#201602B2
#Circular Barn
#https://usaco.org/index.php?page=viewproblem2&cpid=616&lang=en

def solve():
    steps = 999999999999999
    for i in range(N,2*N):
        cur_steps = 0
        for j in range(i-1,i-N,-1):
            cur_steps += sum(rooms[j:i])
        steps = min(steps,cur_steps)
    return fout.write(f"{steps}\n")

fin = open('cbarn.in','r')
fout = open('cbarn.out','w')
lines = fin.read().splitlines()
N = int(lines[0])
rooms = [int(lines[i]) for i in range(1,N+1)]*2

solve()
fout.close()

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值