codeforces 483B Friends and Presents 解题报告

题目链接:http://codeforces.com/problemset/problem/483/B

题目意思:有两个 friends,需要将 cnt1 个不能整除 x 的数分给第一个friend,cnt2 个不能整除 y 的数分给第二个friend。x 和 y 都是素数来的。要求求出最小的 v,v 表示可以从1,2,...,v 中取数。

    开始我做这条题的时候是用很常规的方法做的,结果可想而知,WA,MLE,TLE。只能看题解啦,不会嘛~~~题解真是非常清晰、明白、易懂。

    等我用中文来解释下吧。要用到二分搜索!因为它符合一个条件,如果 v 这个数符合分配给两个人的所有条件,那么 v+1 就更加可以啦~~~所以二分是一个好选择,还有数据量太大啦,1e18 ! 正常做肯定超时!

    首先给出一幅本人呕心沥血画的一幅东西:

    设几个变量 f1,f2,both,others,f1',f2',v。

    v:二分枚举的数,取值是 1 ~ 1e18,图中的全集也~~~

    f1:能被 x 除尽的个数,v/f1

    f2: 能被 y 除尽的个数,v/f2  

    both:同时被 x 和 y 除尽的个数。由于 x 和 y 都是素数,所以就相当于能被 x*y 整除。v/(x*y)  

    others: 既不能被 x 也不能被 y 整除的个数。v - f1 - f2 + both (容斥原理的精髓,both 被减了两次,所以最终要加回一次)

    f1':能分配给 第二个人(除不尽 y)但又不是从others里面选择的数。f1' = f1 - both

    f2': 能分配给 第一个人(除不尽 x)但又不是从others里面选择的数。f2' = f2 - both

    然后给出的 cnt1 和 cnt2

    cnt1 = f2' + others

    cnt2 = f1' + others

    那么最终要判断的是 cnt1 - f2' + cnt2 - f1' 是否  <= others 了。因为从 others 里面取的数都符合分给两个人的条件。

    

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 typedef __int64 LL;
 9 LL cnt1, cnt2, x, y;
10 
11 bool check(LL v)
12 {
13     LL f1 = v / x;
14     LL f2 = v / y;
15     LL both = v / (x*y);
16     LL others = v - f1 - f2 + both;
17     LL ff1 = f1 - both;  // second
18     LL ff2 = f2 - both;  // first
19 
20     LL gf1 = (cnt1 - ff2 >= 0 ? cnt1 - ff2 : 0);   // 注意这个相减有可能为负数,所以要判断下
21     LL gf2 = (cnt2 - ff1 >= 0 ? cnt2 - ff1 : 0);
22 
23     return (gf1 + gf2 <= others);
24 }
25 
26 int main()
27 {
28     while (scanf("%I64d%I64d%I64d%I64d", &cnt1, &cnt2, &x, &y) != EOF)
29     {
30         LL l = 1, r = 1e18;
31         while (l < r)
32         {
33             LL m = (l+r) >> 1;
34             if (check(m))
35                 r = m;
36             else
37                 l = m + 1;
38         }
39         printf("%I64d\n", r);
40     }
41     return 0;
42 }

 

转载于:https://www.cnblogs.com/windysai/p/4058235.html

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

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

相关文章

并行计算随笔(一)

如果觉得本篇文章对你有所启发&#xff0c;请给我点个赞好吗&#xff0c;这对我很重要&#xff0c;谢谢 文章目录1 并行计算基础1.1 什么是并行计算1.1.1 对计算速度的需求1.1.2 并行计算1.1.3 并行计算的基本条件1.1.4 平行计算和分布式计算1.2 为什么需要并行计算1.3 并行计算…

命令行的形式运行php

转自&#xff1a;http://www.cnblogs.com/myjavawork/articles/1869205.html 注意&#xff1a;在安装php时需要将php 的安装目录加到环境变量 PATH 中 (右击我的电脑->属性->高级->环境变量, 如果存在 PATH 则在原来的 PATH 中加入你的PHP安装目录, 如果不存在则新建一…

LeetCode-18-4Sum

一、问题描述 给定一个数组S&#xff0c;和一个int类型的数target&#xff0c;在S中寻找四个数&#xff0c;这四个数之和为target。返回一个vector<vector<int>> 例子&#xff1a;S{1, 0, -1, 0, -2, 2}&#xff0c;target 0.返回结果为{{-1&#xff0c;0&#xf…

Ubuntu安装qwt步骤

1、svn获取代码 svn checkout https://svn.code.sf.net/p/qwt/code/trunk/qwt 2、生产makefile qmake 3、编译(确保已经安装了qopengl再进行这一步&#xff0c;不然失败) make 4、安装 make install转载于:https://www.cnblogs.com/larkin/p/4058959.html

idea android 模块,IntelliJ IDEA 12 - 新的Android应用程序模块向导失败,“无法找到模块的资源目录”...

我面临的问题是一个非常简单的问题... 我无法使用IntelliJ IDEA 12来帮助我创建一个Android应用程序模块(项目)。IntelliJ IDEA 12 - 新的Android应用程序模块向导失败&#xff0c;“无法找到模块的资源目录”成功安装的IntelliJ IDEA 12和使IDE和二者的SDK(Java和Android设备)…

4. time datetime 时间模块

1) 时间表示方式 •时间戳(timestamp)&#xff1a;表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”&#xff0c;返回的是float类型。 •结构化的时间(struct_time)&#xff1a;struct_time元组共有9个元素共九个元素:(年&#xff0c;月&am…

JQuery常用知识点汇总

2019独角兽企业重金招聘Python工程师标准>>> 0、JQuery的基本属性标识&#xff1a; $(".xxx")&#xff1a;标签的class属性&#xff1b; $("#xxx")&#xff1a;标签的id属性&#xff1b; $("xxx")&#xff1a; 标签名&#…

数据库杂谈(三)——关系代数

3 形式化关系查询语言 摘要&#xff1a;关系代数是一种抽象的查询语言&#xff0c;用对关系的运算来表达查询&#xff0c;作为研究关系数据语言的数学工具。在本文中&#xff0c;我们不仅谈论关系代数的知识点&#xff0c;而且还配备了对应的练习题。 文章目录3 形式化关系查询…

android native.js,Android Native与JS通信互调

写在最前&#xff1a;看Android最新技术总结&#xff0c;关注公众号&#xff1a;最近因为App与H5交互逻辑太乱&#xff0c;所以抽空梳理了下&#xff1b;对目前App与H5的各种交互通信做个总结&#xff0c;自取适合自己的交互方式。一、H5调用原生的native方法1、拦截shouldOver…

SharePoint2013 Excel导出好的代码

C#Excel操作类ExcelHelper.cs 来源&#xff1a;http://www.hellocsharp.com/article/67.aspx C#源码世界 发布于&#xff1a; 2014-09-12使用本类之前必须在本机安装了office excel组件或直接下载Microsoft.Office.Interop.Excel.dll文件引用到项目目录下&#xff1a; 然后复制…

基于PMOS的电源防反接电路

如下图所示&#xff0c;是来自TI的参考设计TIDA-00982中的一个电路&#xff0c;功能主要是防止输入反接&#xff0c;R6和C6形成吸收回路&#xff0c;可以对上电过冲有一定的抑制作用。电源正常接入时&#xff0c;PMOS导通&#xff0c;给负载供电&#xff0c;由于VDS的存在&…

计算机组成原理随笔(一)

1 计算机体系结构 计算机革命发展得非常快速&#xff0c;以至于使用老式计算机的很多电影现在看起来十分有年代感&#xff0c;有的电影甚至无法预料后来的计算机是什么样的。 计算机各个组成部分的技术发展非常不均衡&#xff0c;各部分性能差异非常大。在计算机的发展前期&a…

Mongo读书笔记1 -- GridFS

一个Mongo文档最大4M. GridFS不依赖于MongoDB, 其他符合规范的驱动都可以访问它。 GridFS包含两部分&#xff1a;一部分存储文件名和其他metadata; 另一部分存储实际的文件&#xff0c;通常分成一个个大小为256k的小块。 这两个部分通常被命名为files和chunks,在fs命名空间下&a…

简单搭建一个SSM项目(一)

简单搭建一个用户管理的SSM项目框架&#xff0c;虽然也能用servletjdbc搭建更简单的&#xff0c;不过个人感觉工作中更多用的ssm框架项目&#xff0c;这里就简单用ssm来搭建需要的项目吧。 准备工具&#xff1a;eclipse、jdk1.7、Mysql、maven、tomcat。&#xff08;请先确定计…

httpd2.4源码编译

系统版本&#xff1a;RedHat6.5内核版本&#xff1a;2.6.32-431.el6.x86_641、安装httpd2.4版本的软件&#xff0c;首先需要安装apr和apr-util这两个软件包&#xff1b;注意:apr和apr-util的版本&#xff0c;必须在1.5以上&#xff0c;否则会报错[rootnode1 ~]# ls apr-1.5.2.t…

Hadoop随笔(一)

文章目录1 大数据概述1.1 什么是大数据1.2 大数据技术背后的核心思想1.2.1 把数据分发到多个节点1.2.2 把计算逻辑移到数据附近1.2.3 计算节点进行本地数据处理1.2.4 优选顺序读&#xff0c;次之随机读1.2.5 例子1.3 大数据的编程模型1.3.1 大规模并行处理数据库系统1.3.2 内存…

android wp主题,WP桌面:win10系统的最佳替代安卓应用

WP桌面是信壹网络继刷机大师、ROOT大师和安卓清理大师后重点开发的一款仿windows phone风格的手机桌面应用&#xff0c;从2012年推出至今已获得海内外千万粉丝的好评。这个基于Android开发的手机桌面&#xff0c;这不仅仅体现了WP桌面良好的用户体验&#xff0c;同时也从侧面反…

反转一个值中的最后n位

这是在《使用位运算显示二进制数》的基础上进一步扩展&#xff0c;实现反转一个值中最后n位&#xff0c;参数为n和要反转的值。 ~可以一个字节中所有的位&#xff0c;而不是选定的少数位。为达到指定要求&#xff0c;需创建一个掩码&#xff0c;该掩码最后n位设为1&#xff0c;…

数据结构杂谈(三)

本文的所有代码均由C编写 如果你已经看完这篇杂谈,你可以前往上一篇杂谈→数据结构杂谈&#xff08;二&#xff09;_尘鱼好美的小屋-CSDN博客 3 单链表 文章目录3 单链表[toc]3.1 单链表的定义3.1.1 引入2.1.2 单链表和顺序表的优劣2.1.3 单链表的代码定义3.2 单链表的初始化3.…

Mac Book Pro不能识别移动硬盘

2019独角兽企业重金招聘Python工程师标准>>> 今天把一台Mac Book Pro重装了一下系统&#xff0c;然后想把移动硬盘上的资料考入电脑&#xff0c;发现插上移动硬盘电脑没有反映。马上搜索解决办法&#xff0c;众说纷纭。因为没重装之前是好的&#xff0c;所以判断为软…