GDKOI2015 Day2

P1

题目描述:

  给出一个二分图,选择互不相交的边,使得边覆盖的点权和最大。

solution:

  简单DP,用树状数组维护最大值。

  时间复杂度:$O(n \log n) $

P2

题目描述:

  给出N个或黑或白的元素,每个元素有与A集合和B集合相对应的A,B两个值,将N个元素分成A,B两个集合,使每个集合的前K大中的黑色元素的总和最大。

solution:

  因为每个元素都有两个关键字,而且每个关键字只对对应的集合有用,所以必须对其中一个关键字进行固定。枚举A集合的第K大是哪个元素(i),因为只需要黑色元素总和最大,所以A值比A[i]大的黑色元素都归到A集合,A值比A[i]小的白色元素也归到A集合(防止该元素是B集合的前K大)。然后对黑色元素和剩下的白色元素进行DP,状态f[p][q]表示到前p个元素有q个元素分到了A集合的最大值。

  时间复杂度:$ O(n^3) $

P3

题目描述:

  给定一棵树。在线求路径点序列u -> ... -> v1,连续子序列a1,a2 ... ak满足a1<a2< ... <aj>aj+1 >aj+2 >.....>ak或者a1>a2>... >aj< aj+1<aj+2<.... <ak,1<=j<=k,求最大的 \(k\)

solution:

  关于树的算法不多,这题LCA就可以了,只是如何实现合并而已,我们对于LCA的每个区间记12个域:

  区间左端:

  - 递增
  - 递减
  - 先增后减
  - 先减后增

  区间右端:
- 递增
- 递减
- 先增后减
- 先减后增
- 区间左端编号
- 区间右端编号
- 区间长度
- 最大值

  至于转移方程嘛……,自己推。

  时间复杂度:$ O(n \log n) $

P4

题目描述:

  给出一个一开始为0的无穷栈,每次从栈顶拿出一个数\(top\),并把栈里剩下的元素最低位变成$ (Y+1) \mod K \((Y为之前的最低位),然后用top与L相比,如果\) top < L \(,那么X减一,否则把\)top+AK\(复制K份放入栈中。当\)X=0$时,结束操作,输出top。

solution:

  这题的数据很大,因此应该是找规律的题目。观察可得,栈里面的数的变化只与出栈次数有关,如果要把栈里的某一个元素出栈,必须经历s次出栈,而( s%K=1).

  令$ L=cAK+d \(,而栈里的数i只可能是\) i=pAK+p,(0\leq p\leq c+1, 0\leq q\leq d) \(因此我们可以寻找循环节。例如\)K=5,L=21,A=2$

232218508336128.png

  这表格包含了所有可能的数字,从纵向来看,它代表某一个数加AK的值,横向来看,它代表每个数的变化。红色为死亡濒临线。对于第二行(从下向上数)的数来说,必须死13次才能将其出栈,对于第一行来说,必须要死135次才能将其出栈。如果要将第一行的全部出栈,必须死$ 135^2 $次。

再举一个例子:\(K=5,L=26,A=2\)

232219051456568.png

对于第三行要5次,第二行(5^2),第三行(5^3),……

再利用第一个例子研究答案:

30 31 32 33 34 * 31 32 33 34 30 * 22 23 24 *
31 32 33 34 30 * 22 23 24 * 30 31 32 33 34 *
22 23 24 * 30 31 32 33 34 * 31 32 33 34 30 *
23 24 * 30 31 32 33 34 * 31 32 33 34 30 * 22
24 * 30 31 32 33 34 * 31 32 33 34 30 * 22 2331 32 33 34 30 * 22 23 24 * 30 31 32 33 34 *
22 23 24 * 30 31 32 33 34 * 31 32 33 34 30 *
23 24 * 30 31 32 33 34 * 31 32 33 34 30 * 22
24 * 30 31 32 33 34 * 31 32 33 34 30 * 22 23
30 31 32 33 34 * 31 32 33 34 30 * 22 23 24 *22 23 24 * 30 31 32 33 34 * 31 32 33 34 30 *
23 24 * 30 31 32 33 34 * 31 32 33 34 30 * 22
24 * 30 31 32 33 34 * 31 32 33 34 30 * 22 23
30 31 32 33 34 * 31 32 33 34 30 * 22 23 24 *
31 32 33 34 30 * 22 23 24 * 30 31 32 33 34 *……

  规律显得,

  当d<K时,每行有( (d+1)K+(K-d-1) )个元素,每一部分为一行出栈的死亡情况,所以答案的循环节(即整个表格死一次)为( ((d+1)K+(K-d-1))K^c )

  算答案时令( t=(d+1)K+(K-d-1) ),把X拆成( X=a_{0}+\sum_{i=1}^{c}a_{i}tK^{i-1} ),通过( (\sum_{i=1}^{c}a_{i})%K )算出答案所在行,再利用( a_{0} )确定列。

  当d>=K时,每行有K个元素,所以答案的循环节为( K^(c+2) ),计算答案就想一想好了。

  废话不说(我也解释不清),上代码(和链接)

  wck

  lyl

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <queue>
#include <deque>
#include <map>
#include <vector>
using namespace std;
typedef long long LL;
const LL oo=1e18;int T;
LL X, K, L, A;int main()
{freopen("avenger.in", "r", stdin);freopen("avenger.out", "w", stdout);scanf("%d", &T);while (T--){scanf("%I64d%I64d%I64d%I64d", &X, &K, &L, &A);LL AK=A*K;LL c=L/AK, d=L-AK*c;LL ans=0;if (d>=K-1){--X;for (int i=1; X && i<=c+2; X/=K, ++i)ans=(ans+X%K)%K;printf("%I64d\n", (c+1)*AK+ans);}else{LL t=(d+1)*K+(K-d-1);--X;LL a0=X%t;X/=t;for (int i=1; X && i<=c; X/=K, ++i)ans=(ans+X%K)%K;if (ans<d+1)//the last is in the front最后一行在前{if (a0<(d-ans+1)*K)//the last{LL tmp=a0%K;a0/=K;printf("%I64d\n", (c+1)*AK+(ans+a0+tmp)%K);}else//the last but one倒数第二行{a0-=(d+1-ans)*K;if (a0<K-1-d) printf("%I64d\n", c*AK+d+1+a0);else//the last最后一行{a0-=(K-1-d);printf("%I64d\n", (c+1)*AK+(a0%K+a0/K)%K);}}}else//the last but one is in the front倒数第二行在前{if (a0<(K-d-1)-(ans-d)+1)printf("%I64d\n", c*AK+a0+ans);else//the last最后一行{a0-=(K-d-1)-(ans-d)+1;if (a0<K*(d+1))printf("%I64d\n", (c+1)*AK+(a0/K+a0%K)%K);else//the last but one倒数第二行{a0-=K*(d+1);printf("%I64d\n", c*AK+d+1+a0);}}}}}return 0;
}

转载于:https://www.cnblogs.com/GerynOhenz/p/4361184.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XMind入门教程

最近在总结一些框架知识的时候&#xff0c;总找不到一款好的软件来画流程图&#xff0c;后来在网上查找这方面的东西&#xff0c;找到了 XMind,发现用来画思维导图还挺好的&#xff0c;看起来思路清晰&#xff0c;美观。那么便将使用的一些经验分享给大家。 1、什么是思维导图&…

java word转图片tiff_不怕复制内容 Word转存TIFF文件这么玩

辛辛苦苦把Word文件敲好&#xff0c;为了不让别人复制走内容&#xff0c;只能看文稿&#xff0c;有些人就选择转存成PDF文件——但是PDF文件依然可以被编辑&#xff0c;还有什么方法能防范呢&#xff1f;其实在Word 2003之前&#xff0c;用户可以通过Microsoft Office Document…

IDC:聚焦6+6,抓住数字化转型商机

今天&#xff0c;IDC中国2015年中国ICT市场趋势论坛巡回系列的第二站在北京举行。论坛的主题为“加速创新实现数字化转型”。 这是最坏的时代&#xff1a;经济增长乏力、实体经济不振、传统行业在被颠覆与重构、IT市场总体增长进入个位数区间、IT第二平台的领导厂商仍在困境中。…

IBM收购以色列应用发现公司EZSource

6月1日晚消息&#xff0c;IBM宣布对以色列公司EZSource进行收购&#xff0c;交易的具体条款没有被披露。 EZSource成立于2003年&#xff0c;以自有视觉面板产品闻名&#xff0c;该公司的产品能够帮助开发人员将重要的大型机应用程序现代化。该公司在以色列、英国、美国、瑞士、…

hadoop之 Hadoop2.2.0中HDFS的高可用性实现原理

在Hadoop2.0.0之前&#xff0c;NameNode(NN)在HDFS集群中存在单点故障&#xff08;single point of failure&#xff09;&#xff0c;每一个集群中存在一个NameNode&#xff0c;如果NN所在的机器出现了故障&#xff0c;那么将导致整个集群无法利用&#xff0c;直到NN重启或者在…

3D坦克大战游戏源码

3D坦克大战游戏源码&#xff0c;该游戏是基于xcode 4.3&#xff0c;ios sdk 5.1开发。在xcode4.3.3上完美无报错。兼容ios4.3-ios6.0 &#xff0c;一款ios平台上难得的3D坦克大战游戏源码&#xff0c;有20张不同的作战地图。通过左下角方向键和重力感应来控制坦克运行&#xff…

java编程基础素数实验报告,JAVA 基础编程练习题1 (输出素数)

JAVA 基础编程练习题1 (输出素数)JAVA 基础编程练习题1 (输出素数)题目&#xff1a;判断 101-200 之间有多少个素数&#xff0c;并输出所有素数。程序分析&#xff1a;判断素数的方法&#xff1a;用一个数分别去除 2 到 sqrt(这个数)&#xff0c;如果能被整除&#xff0c;则表明…

Go语言在扫码支付系统中的成功实践

今天的内容主要分四个方面。第一&#xff0c;金融支付系统的一些特点;第二&#xff0c;我们的扫码支付系统技术选型;第三&#xff0c;系统迭代过程中的架构演进;第四&#xff0c;与Go相关的一些坑。 金融支付系统的一些特点 图 1 首先从业务流程入手&#xff0c;其实非常简单。…

一站式学习Wireshark(七):Statistics统计工具功能详解与应用

Wireshark一个强大的功能在于它的统计工具。使用Wireshark的时候&#xff0c;我们有各种类型的工具可供选择&#xff0c;从简单的如显示终端节点和会话到复杂的如Flow和IO图表。本文将介绍基本网络统计工具。包括&#xff1a;捕捉文件摘要&#xff08;Summary&#xff09;,捕捉…

Odoo (OpenERP/TinyERP)-10.0 (Debian 8)

平台&#xff1a; Ubuntu 类型&#xff1a; 虚拟机镜像 软件包&#xff1a; odoo-10.0commercial erp odoo open source openerp tinyerp服务优惠价: 按服务商许可协议 云服务器费用:查看费用 立即部署产品详情 产品介绍Odoo https://www.odoo.com/ &#xff08;前Op…

iOS开发- 蓝牙后台接收数据(BLE4.0)

最近在做一个蓝牙相关的项目, 需要在应用进入后台, 或者手机属于锁屏状态的情况下, 仍然保持蓝牙连接, 并且能正常接收数据。 本来以后会很麻烦, 但是学习了下..发现就2步而已。简单的不能再简单了。 好了。下面是具体实现办法。 1.在xxx-info.plist文件中, 新建一行 Required…

angularjs初始化时不显示模板内容, 不显示html, 不显示template

template的内容可能在需要的数据准备好之前就显示出来了, ng-cloak可以解决这个问题 ng-cloak <div id"template1" ng-cloak>{{ hello }}</div> <div id"template2" class"ng-cloak">{{ world }}</div>

20159206《网络攻防实践》第四周学习总结

20159206《网络攻防实践》第四周学习总结 教材学习内容总结 本章主要介绍了网络嗅探和协议分析 网络嗅探是一种常用的窃听技术&#xff0c;利用计算机的网络接口截获目的地为其他计算机的数据报文&#xff0c;以监听数据流中所包含的用户账户密码或私密信息等。 网络泄滩具有很…

四六级php,详解四六级查询API+网页

这个API是第三方API&#xff0c;第三方API的工作原理大都基于此&#xff0c;本文主要起一反三之作用&#xff0c;代码的不处周之还望及时指出。开发环境&#xff1a;WinServer2012 php7.0 Apache2.4.8思路&#xff1a;向官方查询界面传递参数&#xff0c;使用curl抓取结果网页…

终于把joomla 的 protostar 模版的菜单,从垂直改到水平了

protostar-applying-menu-class-suffixes-horizontal-vs-vertical-menus.html joomla 3.7.5 附带的这个template , 菜单丑的要死。 估计是新改的。 看网上的其他站点都没这毛病。 最后终于找到解决方法了。“ nav-pills“ 前面是有空格的 To make the menu horizonal, you can …

Find non-overlap jobs with max cost

Given a set of n jobs with [start time, end time, cost] find a subset so that no 2 jobs overlap and the cost is maximum.Job: &#xff08;start_time, end_time] --- cost 如果只是求maxCost, 一维就可以做。 但是如果要知道有选了哪些job&#xff0c;则需要存成二维。…

优酷视频整段代理php,thinkphp仿优酷带数据源码|php仿优酷视频源码带后台功能强大...

本项目是仿优酷官网&#xff0c;优酷官网是一个集多种知识面为一体的网站&#xff0c;能全面的锻炼我们的技能,所以我们决定仿优酷网。本项目后台主要实现了&#xff1a;用户管理、分类管理、视频管理、评论管理、权限管理、轮播管理、网站配置和广告管理以及登录退出等模块。前…

Centos7安装Oracle JDK

查看Linux是否自带的JDK&#xff0c;如有openJDK&#xff0c;则卸载1 java -version 1 rpm -qa | grep -E ^open[jre|jdk]|j[re|dk] 卸载openjdk1 su root 2 3 yum -y remove java java-1.7.0-openjdk 下载oracle jdk1 wget --no-cookies --header "Cookie: oraclelice…

前端每周清单第 30 期:WebVR 指南,Vue 代码分割范式,理想的 React 架构特性

前端每周清单专注前端领域内容&#xff0c;以对外文资料的搜集为主&#xff0c;帮助开发者了解一周前端热点&#xff1b;分为新闻热点、开发教程、工程实践、深度阅读、开源项目、巅峰人生等栏目。欢迎关注【前端之巅】微信公众号&#xff08;ID&#xff1a;frontshow&#xff…

多线程面试题系列(12):多线程同步内功心法——PV操作上

上面的文章讲解了在Windows系统下实现多线程同步互斥的方法&#xff0c;为了提高在实际问题中分析和思考多个线程之间同步互斥问题的能力&#xff0c;接下来将讲解PV操作&#xff0c;这也是操作系统中的重点和难点。本文将会先简要介绍下PV操作的来源和基本使用方法&#xff0c…