2017Megcup
2017Megcup决赛第三题题解
赛题评论

只做出了一道题,虽然慢慢地退出了前128名,但还是要记录一下。
10点钟开始,一看第一题很熟悉,因为研究过格点图中电流问题,其实就是求解线性方程组。上来就编,用Python,用numpy解方程,比较难于描述,编程水平也太差劲,好久不编手生得很。磨磨蹭蹭直到2:19才成功解决。这是排名90名左右,但是因为这道题做出来的人太多,也就不太值钱了,所以我一直在退步。以后也再没过题,直到比赛即将结束前的三四个小时,退出了前128名,榜上无名了。

什么叫做能力?能力就是比赛时的状态,就看第一次遇到问题时的反应。人跟人的差距简直就是天壤之别。人与人之间智商的差距之悬殊,不亚于人与人体型大小之悬殊。想想那些2米多的大高个,想想1米七多点的自己。

开始做第二题DogFood,我一开始觉得应该是暴力,枚举1e8个点,用python写,用sklearn的kdtree,结果太慢了,运行出结果大约需要5分钟,并且结果太不精确。我就想别人用的什么妙招。。。很纠结。
直到比赛结束,看到一大群人都是暴力,就连求第k近邻都是暴力,没有使用KD树,只不过用的是C++,估计会快得多。真后悔没有用C++暴力一下。

开始做Error++,这道题不会做,也没思路。就是瞎编

林教主誓死要拿下锈规作图,我也开始看这道题。读Matrix大神博客,懂了,编不出来。知道第二天花了整整一天时间才怼出来了这道题。

这次比赛的奖金分配、计分规则非常新颖,用一个图的形式形象的描述了分数的计算方式。
这种计算方式有如下特点:

  • 一道题,做出来的人越少,这些人越能分到更多的流量
  • 流量延时,比赛结束之后,流量还在计算着,需要等10h之后再看积分

解法:
这个问题其实就是解线性方程组,每个结点的流入量与流出量相等。
对于N个结点,分别对每个结点列方程,可以很容易列出N个线性方程来
但是,这N个线性方程组的秩必然是N-1
还要添加一个条件:各个节点的硬币之和为(人题数)
我的做法是,不对中心节点列方程(毕竟它有一条自回路,处理略麻烦),添加“硬币之和”条件
解此线性方程组即可

这么简单的问题,我竟然做了将近4个半小时,真是老了
转念一想,我年轻时也不咋地

import mathimport numpy as npsolved = [0] * 8  # 第i题解决的人数
person_id_map = dict()  # 将人名映射到id
data = []
g = None  # 图136+9个结点
gsize = Nonescore = None  # 当前分数
sum_score = None  # 分数积分# 构图
def submit(person_id, q):solved[q] += 1for i in range(9, gsize):if g[q][i]:g[q][i] = 1 / solved[q]g[q][person_id] = 1 / solved[q]g[person_id][q] = 1g[8][q] += 1g[q][8] += 1 / solved[q]def getOutSum(pos):s = 0for i in range(gsize):s += g[pos][i]return sdef equation():a, b = [], []# o表示各个结点流出流量之和o = [0] * gsizefor i in range(gsize):o[i] = getOutSum(i)for i in range(gsize):if i == 8: continueif not o[i]: continuerow = []for j in range(gsize):if not o[j]: continueif i == j:row.append(1)else:row.append(-g[j][i] / o[j])a.append(row)b.append(0)a.append([1] * len(a[0]))b.append(sum(solved))ans = np.linalg.solve(a, b)ansi = 0for i in range(gsize):if o[i]:score[i] = ans[ansi]ansi += 1else:score[i] = 0def accumulate(dt):for i in range(gsize):sum_score[i] += score[i] * dtdef load():global gsizegsize = 9# 读入数据,处理for line in open("in.txt", encoding="utf8"):if not line: continuet, person, q = line.split()t = float(t)q = int(q)if person not in person_id_map:person_id_map[person] = gsizegsize += 1person_id = person_id_map[person]data.append((t, person_id, q))def init():global g, score, sum_scoreg = [[0 for _ in range(gsize)] for __ in range(gsize)]g[8][8] = 1score = [0] * gsizesum_score = [0] * gsizedef people():ans = []for name, person_id in person_id_map.items():ans.append((name, sum_score[person_id]))ans.sort(key=lambda x: -x[1])return ansdef main():for i in range(len(data)):if i > 0:accumulate(data[i][0] - data[i - 1][0])submit(data[i][1], data[i][2])equation()accumulate(3600 * 22 - data[len(data) - 1][0])def getStandard(a):sz = min(len(a), 32)mean = sum([a[i][1] for i in range(sz)]) / szsq = sum([(a[i][1] - mean) ** 2 for i in range(sz)]) / szreturn math.sqrt(sq)def output(a):s = getStandard(a)have_money = min(len(a), 32)percent = [math.exp(a[i][1] / s) for i in range(have_money)]sum_percent = sum(percent)for i in range(have_money):print(i + 1, a[i][0], a[i][1], 88888 * percent[i] / sum_percent)for i in range(have_money, min(128, len(a))):print(i + 1, a[i][0], a[i][1], 0)load()
init()
main()
output(people())

转载于:https://www.cnblogs.com/weiyinfu/p/6622662.html

Megcup 2017 决赛第一题 规则相关推荐

  1. 蓝桥杯java第四届决赛第一题--猜灯谜

    标题:猜灯谜A 村的元宵节灯会上有一迷题:请猜谜 * 请猜谜 = 请边赏灯边猜小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字.请你用计算机按小明的思路算一下,然后提交"请猜谜& ...

  2. 一道很水的题(南工校赛决赛第一题)

    当阳光拥抱过花朵,光便携带了花香. 晚风掠过人群,风就能学会低吟. 影子在眷恋中消磨岁月,它也铭记了光的身形. --这便是我的一切,我所能留下的一切. 我们对于身上不满意的部分,积累了多年的厌恶感,早 ...

  3. 蓝桥杯java第三届决赛第一题--星期日

    [结果填空] (满分5分)1949年的国庆节(10月1日)是星期六. 今年(2012)的国庆节是星期一.那么,从建国到现在,有几次国庆节正好是星期日呢?只要答案,不限手段!可以用windows日历,w ...

  4. 蓝桥杯java第五届决赛第一题--国王的遗产

    标题:国王的遗产X国是个小国.国王K有6个儿子.在临终前,K国王立下遗嘱:国王的一批牛作为遗产要分给他的6个儿子.其中,大儿子分1/4,二儿子1/5,三儿子1/6,....直到小儿子分1/9.牛是活的 ...

  5. 蓝桥杯java第六届决赛第一题--分机号

    标题:分机号X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如:751,520,321 都满足要求,而,766,918,201 就不符合要求.现 ...

  6. 蓝桥杯java第七届决赛第一题--愤怒小鸟

    愤怒小鸟X星球愤怒的小鸟喜欢撞火车!一根平直的铁轨上两火车间相距 1000 米两火车 (不妨称A和B) 以时速 10米/秒 相对行驶.愤怒的小鸟从A车出发,时速50米/秒,撞向B车,然后返回去撞A车, ...

  7. 第八届蓝桥杯Java A组决赛第一题

    标题:图书排列 将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置. 请计算一共有多少种不同的排列方案. 注意,需要提交的是一个整数,不要填写任何多余的内容. 答案:47930 ...

  8. 蓝桥杯2012决赛JAVA本科组决赛第一题个人理解

    复杂现象背后的推动力,可能是极其简单的原理.科学的目标之一就是发现纷繁复杂的自然现象背后的简单法则.爱因斯坦的相对论是这方面的典范例证. 很早的时候,生物学家观察某区域某种昆虫的数量(称为虫口数)之逐 ...

  9. 蓝桥杯第五届决赛真题大全解(java版本)

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 >蓝桥杯第五届决赛第一题[(详情(国王的遗产))](http://blog.csdn.n ...

最新文章

  1. PCA(2):PCA算法实现的两种方式
  2. 刚刚,蚂蚁金服荣膺“中国金融大数据领军企业”称号
  3. 天津发票版本文件服务器端口,天津市增值税发票综合服务平台网址
  4. boost::spirit模块实现利用 Karma 生成器的替代方案和内置匹配功能的测试程序
  5. 控制`Actor`朝向,运动 Learn Unreal Engine (with C++)
  6. java desktop mailto,mailto在Java?
  7. windowns2019辅域添加
  8. android 崩溃日志捕获,安卓Java崩溃的捕获和日志记录
  9. 大数据中心大数据资源平台建设方案
  10. 关于手机的MAC地址
  11. 庄子·内篇·逍遥游第一(郭象注)
  12. 迄今见过最好的职业规划文章
  13. python迅雷下载任务出错_迅雷下载时提示“任务出错”怎么办?(附多种解决方法)...
  14. 快速转行做产品经理系列基础篇:1、中国互联网发展史简述
  15. Android推送的群魔乱舞
  16. iOS接入Google登录
  17. 怎么找回计算机用户名密码怎么办,忘记了登录路由器的用户名与密码怎么办?...
  18. clearCallingIdentity与restoreCallingIdentity-千里马framework系统源码实战详解
  19. 安装mysql时一直卡在starting the server这一位置,解决方案
  20. html日期选择器小日历样式,超漂亮的网页 日期 时间选择器

热门文章

  1. 常用api查询网站记录
  2. python flask的request模块以及在flask编程中遇到的坑
  3. WPF: 本地化(Localization) 实现
  4. int 与Integer的用法与区别
  5. iOS开发--基于AFNetWorking3.0的图片缓存分析
  6. [Vue warn]: Cannot find element: #main
  7. HTML5 viewport 标签与 CSS3 background-size 属性 使图片完全适应区域内容
  8. 关于钩子(Hook)的使用
  9. Element-UI 要怎么学?官方文档!
  10. 信息系统项目管理05——项目范围管理