The Travelling Customer (Coding, Training)
The Travelling Customer (Coding, Training)
题目描述
In this programming challenge you need to solve the following problem:
You are represented a pricelist, an itemamount and a sum, as well as the stock parameter.
Your job is to select itemamount items which will result in the sum.
You may not select more items than stock from each type.Example:
Chips=4
Eggs=2Items=5
Sum=14
Stock=3
Level=1An accepted answer would be: 2Chips3Eggs
Visit problem.php to request a new problem.
Send your answers to [answer.php?answer=answer] with the format NItemnameNItemname.
You need to solve 5 problems and your timelimit for each problem is 3 seconds.Good Luck!
在这个编程挑战中你需要解决如下问题:
你将看到一个pricelist、一个itemamount和一个sum,以及stock参数。
你的工作是选出结果为sum的tiems的itemamount。
你选出的每种类型的itemamount不能超过stock
例子:
Chips = 4
Eggs = 2
Items = 5
Sum = 14
Stock = 3
Level = 1
一种承认的答案是:2Chips3Eggs
访问 problem.php 来请求一个新问题。
将你的答案以NItemnameNItemname的格式发送到answer.php?answer=[answer]
你需要解决5道题,每道题的时间限制为3秒。
祝你好运!
解
似乎是一个背包问题,但是这里已经给出最大价值,变成了一个约束求解的问题,解题思路很清楚,从problem.php得到数据,然后解出答案提交到answer.php,只不过有3秒的时间限制,手速快点还是有机会的,我手速比较慢,就写一个脚本代劳了。
这里使用的是Z3约束求解器来完成的,只需要定义好未知数(x),添加好约束条件(0<x<Stock, sum(x) == items, sum(x*pricelist(x)) == sum)即可快速解出未知数(如果有解的话),然后提交结果即可
直接上代码(每一个print都是一个学习的点啊!),
from z3 import *
import requestsdef SolveProblem():exec(ProblemResult.text)problemdata = locals()#print(problemdata)items = problemdata['Items']sum = problemdata['Sum']stock = problemdata['Stock']level = problemdata['Level']problemdata.pop('Items')problemdata.pop('Sum')problemdata.pop('Stock')problemdata.pop('Level')#print(problemdata)s = Solver()key = list(problemdata.keys())value = [problemdata[i] for i in key]x = [Int('x%d' %i) for i in range(len(problemdata))]#print(value)#print(x)for i in range(len(x)):s.add(x[i] < stock)s.add(x[i] > 0)#个人感觉这里可以优化,但是没去深入研究if level == 1:s.add(x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] == items)s.add(value[0]*x[0] + value[1]*x[1] + value[2]*x[2] + value[3]*x[3] + value[4]*x[4] + value[5]*x[5] + value[6]*x[6] + value[7]*x[7] == sum)if level == 2:s.add(x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] == items)s.add(value[0]*x[0] + value[1]*x[1] + value[2]*x[2] + value[3]*x[3] + value[4]*x[4] + value[5]*x[5] + value[6]*x[6] + value[7]*x[7] + value[8]*x[8] == sum)if level == 3:s.add(x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] + x[9] == items)s.add(value[0]*x[0] + value[1]*x[1] + value[2]*x[2] + value[3]*x[3] + value[4]*x[4] + value[5]*x[5] + value[6]*x[6] + value[7]*x[7] + value[8]*x[8] + value[9]*x[9] == sum)if level == 4:s.add(x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] + x[9] + x[10] == items)s.add(value[0]*x[0] + value[1]*x[1] + value[2]*x[2] + value[3]*x[3] + value[4]*x[4] + value[5]*x[5] + value[6]*x[6] + value[7]*x[7] + value[8]*x[8] + value[9]*x[9] + value[10]*x[10] == sum)if level == 5:s.add(x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] + x[9] + x[10] + x[11] == items)s.add(value[0]*x[0] + value[1]*x[1] + value[2]*x[2] + value[3]*x[3] + value[4]*x[4] + value[5]*x[5] + value[6]*x[6] + value[7]*x[7] + value[8]*x[8] + value[9]*x[9] + value[10]*x[10] + value[11]*x[11] == sum)solution = []answer = ''if s.check() == sat:m = s.model()for i in range(len(x)):solution.append(m[x[i]].as_long())answer += str(solution[i])+key[i]#print(level,answer)return answerProblemUrl = 'http://www.wechall.net/challenge/training/programming/knapsaak/problem.php'
AnswerUrl = 'http://www.wechall.net/challenge/training/programming/knapsaak/answer.php'
cookie = {}#用你自己的Cookie
ProblemResult= requests.post(url=ProblemUrl,cookies=cookie)
#print(ProblemResult.text)
Answer = SolveProblem()
#print(Answer)AnswerUrl += '?answer=['+Answer+']'
AnswerResult = requests.post(url=AnswerUrl,cookies=cookie)
print(AnswerResult.text)
只需要用自己的Cookie运行5次脚本即可解题(个人感觉还能优化,不过懒得弄了)。
The Travelling Customer (Coding, Training)相关推荐
- wechall靶场training系列通关记录
wechall靶场Training系列通关记录 Training: Get Sourced 第一题很简单,获取藏在网页源代码中的密码.F12查看网页中的注释即可找到答案: Training: Steg ...
- 自我成长和学习的32个网站,每天逛一逛都有不同的收获
社区类 1.GitHub 开源代码的平台. 2.stackoverflow 程序员最好的问答网站. 3.CSDN 博客平台. 4.v2ex 创意工作者的社区. 5.quora 国外版知乎. 7.掘金 ...
- HANA S/4 标准表(MARC MBEW COBL)增强流程
S/4系统中对某些表如(MARC.MBEW.COBL)进行增强的时候,需要同时更新CDSVIEW的DDL,否则就会报如下的错误导致标准表无法激活. SAP在NOTE 2242679 - Redirec ...
- 程序员的必备网站 - 合集(找资源?看我一个就够了)
目录 目录 "网站的搬运工" 一,做饭要有菜谱 - 导航类 1. 学吧导航,该网站收录了国内外众多优质学习平台,这些学习平台囊括了综合类,外语类,编程算法类,电脑办公类,百科类,设 ...
- 操纵Review被封店,申诉信
标签: 测评被封 亚马逊申诉 操纵评价申诉 分类: 亚马逊申诉模板 Hello,We recently contacted you about product review manipulation. ...
- 刷题网站LeetCode/牛客/LintCode介绍
首先说明,这绝不是刷题网站软文啊.作为一个注册csdn有7年的用户,还一直没有在csdn贡献自己的文章,在这里拜读了不少,但无论技术还是思想,不输出就无法内化成自己的东西.现在也push自己去输出啦~ ...
- SPII翻译软件测试简历,软件测试工程师英文求职简历范文
英文简历是使用英文写的简历.英文简历(resume)并无固定不变的单一形式,应聘者完全可以根据个人的具体情况来确定采用何种形式,灵活设计. name: xxx sex: male ethnic: ch ...
- Thingworx自定义扩展开发(一)- 开发环境搭建、Extension Demo Coding
系列 Thingworx自定义扩展开发(一)- 开发环境搭建.Extension Demo Coding Thingworx自定义扩展开发(二)- Widget Demo Coding Thingwo ...
- LLMs之InstructGPT:《Training language models to follow instructions with human feedback》翻译与解读
LLMs之InstructGPT:<Training language models to follow instructions with human feedback>翻译与解读 导读 ...
最新文章
- 如何使用Transformer来做物体检测?
- linux命令查看cpu负载,Linux下使用w命令和uptime命令查看系统负载
- java remote desktop_Remote Desktop
- ktor框架用到了netty吗_如何使用 Ktor 快速开发 Web 项目
- yaml 数组_接口测试:A01_HttpRunner基础_05_YAML格式测试用例
- 第一次作业(李奇峰 201731062426)
- 通达信公式大全_通达信MACD金叉的选股公式大全
- 41款常用APP被爆过度索取权限、数据共享给第三方
- 超简单的内网邮件服务器搭建(CentOS7 postfix+dovecot)
- 服务器IIS配置添加下载扩展名
- adb官方最新下载链接和常用操作
- outlook2019配置QQ邮箱
- 56个民族服饰:介绍56个民族的56个美女,衣服真的好漂亮
- DoDataExchange(CDataExchange* pDX)没有执行到原因
- [附源码]Python计算机毕业设计高校社团管理系统
- C++数学与算法系列之初等数论
- 运行VUE项目时,出现npm ERR! A complete log of this run can be found in:...报错
- Eric靶机渗透测试通关全教程
- Java 基础学习记录
- 虚拟化系统镜像下载地址及Linux更新国内源