Python刷题|Do the Untwist
清明节后,忽然有点小忙了,刷题大业被无奈耽搁。
昨天,自家的服务器卡成翔,一顿操作,空间和连接资源优化一波,重启服务,呃,没啥效果。。。。。
蓦然发现有俩破JOB居然跑了两三天!
无奈打开系统资源管理监控,IO个位数M/s,磁盘一直是100%最长活动时间 ,什么鬼?IO这么低,磁盘君挂了吗??
最终只能祭出终极杀招:磁盘碎片整理,JOB杀掉。
看到IO上去了,占用下来了。叹口气,开始刷题
1、题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1006
2、思路:加密,解密。按照加密规则推导下,然后基本就能知道反向操作的规则并推导出公式了。正向推导的作用是更好地理解规则,找出其中需要注意的点 ,比如,公式中 plaincode[k*i % n] - i 一定是小于28的,因为plaincode[]最大也就是plaincode['.'] = 27,但是plaincode[k*i % n] - i 会出现负数的情况,所以得到两种情况的公式:
if plaincode[k*i % n] - i >= 0 then plaincode[k*i % n] = ciphercode[i] + i
if plaincode[k*i % n] - i < 0 then plaincode[k*i % n] = ciphercode[i] + i - 28
合并一下,就是 :plaincode[k*i % n] = (ciphercode[i] + i)%28
剩下就是按照规则步骤反向操作了
ciphertext -> ciphercode -> plaincode -> plaintext
3、我的解答:
代码部分接受多行输入还未实现,有时间再调试,目前主要目标在算法