肝bzoj十连测

前言

有些场缺失。
已经单独写过的第二场、第三场和第五场这里就不写了。
这里写的都是没有做的,仅仅是写题解。

第六场

A

一个图,有若干点对。
两人轮流操作,每次将一个无归属的结点归给自己,所有结点均有归属游戏结束。
如果一个点对的两个点都被同一人占有,该人获得此点对对应权值。
先手希望最大化其的价值减去后手所获价值,后手则希望最小化。
每次添加或删除一个点对,你要在这之后输出先手的价值减后手价值。

设一个结点的权值为其所处所有点对价值和。
那么我们重新定义,一个人的权值是其所占有所有结点点权。
于是我们发现,如果一个点对两点均被同一人占有,会带来双倍价值,而若在不同人手里,因为是先手价值减去后手价值,刚好抵消。
因此,除以2便是正确答案。
这个新的游戏很好维护,因为双方一定是每次取最大那个。
于是我们需要维护点权按照降序排序后奇数位和减去偶数位和,并且要兹瓷修改点权。
一次修改可以看做删除与添加。
只要能知道删除位置所属奇数位还是偶数位即可,可以用线段树维护点权,通过询问比其小的个数可得知,然后维护好奇数位和与偶数位和即可。

第四场

A

长度为m的绳子上有n只蚂蚁,蚂蚁速度均为1,且有一个初始方向。两种方案不同仅当存在一只蚂蚁初始方向不同。两只蚂蚁相遇就会各自改变方向。求对于所有T,最后一只离开绳子的蚂蚁离开时间恰好为T的方案数。

相遇的掉头可以看做穿越。
于是可以枚举T也就是最大值,进行统计。
每只蚂蚁对应着两个权值即其离开绳子的两种时间,我们将总共2n个时间离散,顺序扫,对于一只蚂蚁,较小的离开时间是左端点,较大的离开时间是右端点。对于一个T,如果扫过的左端点数量小于n那么方案数一定为0,否则方案数为2^(扫过右端点数量)。

B

有n个栈与m个操作,操作类型有三种:
1、将元素x压入第l~r个栈中。
2、将第l~r个栈的栈顶元素弹出。
3、询问一个栈的第k个元素。

可以考虑离线,用线段树来维护,下标为时间,添加权值为1,删除权值为-1。扫到一个点,做掉挂在其上面的1、2操作,然后解决挂在上面的询问,相当于询问线段树一个前缀区间的一个最大位置使得该位置后缀为k。

BZOJ 2908 题目是一个数据下载任务。这个任务要求下载指定的数据文件,并统计文件中小于等于给定整数的数字个数。 为了完成这个任务,首先需要选择一个合适的网址来下载文件。我们可以使用一个网络爬虫库,如Python中的Requests库,来帮助我们完成文件下载的操作。 首先,我们需要使用Requests库中的get()方法来访问目标网址,并将目标文件下载到我们的本地计算机中。可以使用以下代码实现文件下载: ```python import requests url = '目标文件的网址' response = requests.get(url) with open('本地保存文件的路径', 'wb') as file: file.write(response.content) ``` 下载完成后,我们可以使用Python内置的open()函数打开已下载的文件,并按行读取文件内容。可以使用以下代码实现文件内容读取: ```python count = 0 with open('本地保存文件的路径', 'r') as file: for line in file: # 在这里实现对每一行数据的判断 # 如果小于等于给定整数,count 加 1 # 否则,不进行任何操作 ``` 在每一行的处理过程中,我们可以使用split()方法将一行数据分割成多个字符串,并使用int()函数将其转换为整数。然后,我们可以将该整数与给定整数进行比较,以判断是否小于等于给定整数。 最后,我们可以将统计结果打印出来,以满足题目的要求。 综上所述,以上是关于解决 BZOJ 2908 数据下载任务的简要步骤和代码实现。 希望对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值