大家好,我是普通小明,初入学习博客,一起加油!
首先,感谢 小蓝刷题 对我的鼓励,我也希望加入学习算法这个大家庭。
第一篇文章,有些不完美,还请多多指教。
省赛心得
蜂巢题解-思路点拨
蜂巢题解-AC代码
蜂巢题解-刷题总结
未来展望
遗憾落幕十三届蓝桥PyB省赛,破灭了大一自学算法拿下国奖的传奇神话
究其原因
1、对算法过多理论而缺少实践,缺少刷题量。
2、对算法的理解不够全面。
3、对数论算法有所欠缺。
立志
1、一年时间完成蓝桥刷题系统过半题量。
2、全面掌握各种算法,并且形成模板记忆。
3、多看数学难题,提升思维转换能力。
个人主页有另一个更简单的解法
读完题没思路怎么办?——模拟样例,模拟例子

由对称关系不难得出,以绿点为起点,选任一橙点为终点既包含了所有两点之间距离的情况
先任选一个为终点

图1
如图1有六条路线最短,为了方便观察显然选取任意平行四边形一侧边为个体。
最短路总结多观察几个图形发现在对方节点所在方向(六边形六个方向)延长线所形成的交点都是最短路如图2和3


图2 图3
通过所有外围的节点进行最短路总结如图2如图3我们发现都是平行四边形
从而我们分析如何算平行四边形的一侧边距离(因为对称任选一侧都相等)就能得出最短路
再如图2和3不难发现图中有两种情况的平行四边形
情况1、先选蓝线右下方任一点分析如图4发现通过水平方向和竖直方向距离以及角度关系就能算出距离

图4
设x,y分别为水平、垂直距离,则蓝线距离为len=
情况2、再选蓝线左上方一点分析如图5发现无法由情况1算出,但我们知道是根据x,y两个距离算出的,我们先画出,发现紫线距离能转换成绿线距离。

图5
而绿线距离len=
设计坐标系,为了方便计算我们假设一个六边形的变长是
,所以水平方向上相邻两个橙点的距离就是2,因此最短路距离就是len//2
所以我们需要根据6个方向进行坐标映射——输入方向和距离,返回dx,dy两个增量
用e代表
def cc(f,len): # 坐标映射|| f为方向,len为行走的距离,返回值为dx,dy的增量(微分)
if f==0:return (-len,0)
elif f==1:return (-len/2,len*e/2)
elif f==2:return (len/2,len*e/2)
elif f==3:return (len,0)
elif f==4:return (len/2,-len*e/2)
elif f==5:return (-len/2,-len*e/2)
# 蓝线可根据斜率区分,蓝线上的情况两种都可以所以这里分给蓝线右下方
if abs(y/x)<=e: # 蓝线右下方
len=round(((x-y*e/3)+(y*e*2/3))/2) # 因为根号有精度问题需要四舍五入
print("%d"%len)
else: # 蓝线左上方
len=round(y*e/3)
print("%d"%len)
def cc(f,len): # 坐标映射|| f为方向,len为行走的距离,返回值为dx,dy的增量(微分)
if f==0:return (-len,0)
elif f==1:return (-len/2,len*e/2)
elif f==2:return (len/2,len*e/2)
elif f==3:return (len,0)
elif f==4:return (len/2,-len*e/2)
elif f==5:return (-len/2,-len*e/2)
e=3**0.5 # 存根号3
d1,p1,q1,d2,p2,q2=map(int,input().split())
a1=[[d1,p1],[(d1+2)%6,q1]] # a路径的两次方向变化
b1=[[d2,p2],[(d2+2)%6,q2]] # b路径的两次方向变化
a=[0,0] # a点映射后的坐标(x,y)
b=[0,0] # b点映射后的坐标(x,y)
for i in range(2): # 进行a路径的坐标映射
dx,dy=cc(a1[i][0],a1[i][1]*2) # 因为一格长度是2所以*2
a[0]+=dx
a[1]+=dy
for i in range(2): # 进行b路径的坐标映射
dx,dy=cc(b1[i][0],b1[i][1]*2)
b[0]+=dx
b[1]+=dy
x,y=abs(b[0]-a[0]),abs(b[1]-a[1]) # 计算a点b点的水平垂直距离
# 蓝线可根据斜率区分,蓝线上的情况两种都可以所以这里分给蓝线右下方
if abs(y/x)<=e: # 蓝线右下方
len=round(((x-y*e/3)+(y*e*2/3))/2) # 因为有根号有精度问题需要进行四舍五入
print("%d"%len)
else: # 蓝线左上方
len=round(y*e/3)
print("%d"%len)

1、首先读题,为了补充思路可以先模拟样例,再进行各种情况的模拟
扩展到以后,读不懂题或无思路可进行5分钟左右的模拟寻找思路
2、掌握基本的坐标系,三角函数,几何问题等
1、第一次写博客,可能有一些排版问题,也可能有讲解臃肿,还请各位同学指出我加以改正,能够写出更好的题解思路
2、作为二本大一,我本着以赛促学参加各种比赛,学习算法知识为考研也为进入大厂!很庆幸认识了 小蓝刷题 能一块努力,准备明年的比赛!
3、计划以ACM算法为标准进行系统的算法学习(可怜学校并无AMC队),并且在蓝桥刷题系统应用到实践上,让理论不止于理论,让本届比赛的遗憾成为过去。
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt