CF 483B. Friends and Presents 数学 (二分) 难度:1
1 second
256 megabytes
standard input
standard output
You have two friends. You want to present each of them several positive integers. You want to present cnt1 numbers to the first friend and cnt2 numbers to the second friend. Moreover, you want all presented numbers to be distinct, that also means that no number should be presented to both friends.
In addition, the first friend does not like the numbers that are divisible without remainder by prime number x. The second one does not like the numbers that are divisible without remainder by prime number y. Of course, you're not going to present your friends numbers they don't like.
Your task is to find such minimum number v, that you can form presents using numbers from a set 1, 2, ..., v. Of course you may choose not to present some numbers at all.
A positive integer number greater than 1 is called prime if it has no positive divisors other than 1 and itself.
The only line contains four positive integers cnt1, cnt2, x, y (1 ≤ cnt1, cnt2 < 10^9; cnt1 + cnt2 ≤ 10^9; 2 ≤ x < y ≤ 3·10^4) — the numbers that are described in the statement. It is guaranteed that numbers x, y are prime.
Print a single integer — the answer to the problem.
3 1 2 3
5
1 3 2 3
4
#include<cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
ll x,y,cnt1,cnt2;
ll gcd(ll a,ll b){
if(b==0)return a;
return gcd(b,a%b);
}
ll pos(ll a){
if(a>=0)return a;
return 0;
}
int main(){
scanf("%I64d%I64d%I64d%I64d",&cnt1,&cnt2,&x,&y);
ll d=gcd(x,y);
ll lcm=x*y/d;
ll na=lcm-lcm/x-lcm/y+1;
ll nb=lcm/x-1;
ll nc=lcm/y-1;
ll sumn=na+nb+nc;
ll t=(cnt1+cnt2)/sumn;
t=max(t,cnt2/(na+nb));
t=max(t,cnt1/(na+nc));
ll ta=na*t;
ll tb=nb*t;
ll tc=nc*t;
ll ans=lcm*t;
if((pos(cnt2-tb)+pos(cnt1-tc))<=ta)ans--;
else {
ll r=0x7fffffff;
ll r0=pos(cnt2-tb)+pos(cnt1-tc)-ta;
if(r0>=0&&cnt2>=tb&&cnt1>=tc)r=min(r,r0); ll r1=x*(cnt1-tc-ta)/(x-1);
ll tr11=cnt1-tc-ta+(r1/x-1);
if(tr11/x==r1/x-1)r1=min(r1,tr11);
r1=max(r1,x*(cnt2-tb));
if(cnt1>=tc+ta)r=min(r,r1);
ll r2=y*(cnt2-tb-ta)/(y-1);
ll tr2=cnt2-tb-ta+(r2/y-1);
if(tr2/y==r2/y-1)r2=min(r2,tr2);
r2=max(r2,y*(cnt1-tc));
if(cnt2>=tb+ta)r=min(r,r2);
ans+=r;
}
printf("%I64d\n",ans);
return 0;
}
CF 483B. Friends and Presents 数学 (二分) 难度:1的更多相关文章
- Codeforces 483B - Friends and Presents(二分+容斥)
483B - Friends and Presents 思路:这个博客写的不错:http://www.cnblogs.com/windysai/p/4058235.html 代码: #include& ...
- 快速切题CF 158B taxi 构造 && 82A double cola 数学观察 难度:0
实在太冷了今天 taxi :错误原因1 忽略了 1 1 1 1 和 1 2 1 这种情况,直接认为最多两组一车了 2 语句顺序错 double cola: 忘了减去n的序号1,即n-- B. Taxi ...
- CodeForces 483B Friends and Presents
Friends and Presents Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I ...
- Codeforces483B. Friends and Presents(二分+容斥原理)
题目链接:传送门 题目: B. Friends and Presents time limit per test second memory limit per test megabytes inpu ...
- UVA 11881 Internal Rate of Return(数学+二分)
In finance, Internal Rate of Return (IRR) is the discount rate of an investment when NPV equals zero ...
- HDU 6216 A Cubic number and A Cubic Number(数学/二分查找)
题意: 给定一个素数p(p <= 1e12),问是否存在一对立方差等于p. 分析: 根据平方差公式: 因为p是一个素数, 所以只能拆分成 1*p, 所以 a-b = 1. 然后代入a = b + ...
- codeforces 483B Friends and Presents 解题报告
题目链接:http://codeforces.com/problemset/problem/483/B 题目意思:有两个 friends,需要将 cnt1 个不能整除 x 的数分给第一个friend, ...
- UVA 10668 - Expanding Rods(数学+二分)
UVA 10668 - Expanding Rods 题目链接 题意:给定一个铁棒,如图中加热会变成一段圆弧,长度为L′=(1+nc)l,问这时和原来位置的高度之差 思路:画一下图能够非常easy推出 ...
- CF 551E. GukiZ and GukiZiana [分块 二分]
GukiZ and GukiZiana 题意: 区间加 给出$y$查询$a_i=a_j=y$的$j-i$最大值 一开始以为和论文CC题一样...然后发现他带修改并且是给定了值 这样就更简单了.... ...
随机推荐
- Python开发【Django】:组合搜索、JSONP、XSS过滤
组合搜索 做博客后台时,需要根据文章的类型做不同的检索 1.简单实现 关联文件: from django.conf.urls import url from . import views urlpat ...
- django haystack
# coding=utf-8 from haystack import indexes from yw_asset.models import * class AssetIndex(indexes.S ...
- 数据网格和树-EasyUI Datagrid 数据网格、EasyUI Propertygrid 属性网格、EasyUI Tree 树、EasyUI Treegrid 树形网格
EasyUI Datagrid 数据网格 扩展自 $.fn.panel.defaults.通过 $.fn.datagrid.defaults 重写默认的 defaults. 数据网格(datagrid ...
- PAT 1100 Mars Numbers[难]
1100 Mars Numbers (20 分) People on Mars count their numbers with base 13: Zero on Earth is called &q ...
- mysql++使用
Mysql++是官方发布的.一个为MySQL设计的C++语言的API.Mysql++为Mysql的C-Api的再次封装,它用STL(Standard Template Language)开发并编写,并 ...
- 3.5 Templates -- Binding Element Attributes(绑定元素属性)
一.概述 除了正常的文本,你可能还需要你的模板中包含的HTML元素的属性绑定到controller. 1. 例如,设想controller有一个属性包含一个图片的URL: <div id=&qu ...
- 【cocos2d-x 3.5】Lua动画API
1.加载动画 local node = cc.CSLoader:createNode("ActionTimeline/DemoPlayer_skeleton.csb") local ...
- cocos-lua基础学习(四)quick层封装后的目录结构
命名空间 cc cocos2d核心类 ccb cocosbuilder扩展 ccs cocostudio扩展 cocos2d目录结构 bitExtend.lua cocos2d.lua cocos2d ...
- http之请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法.HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法.HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE ...
- uva1452
这题说的是给了一个序列1到n然后你从1 位置开始数k个删除,直到最后每个数都被删除了.我们考虑1个数在被删除前后的位置,比如现在在i位置那么 回到删除当前的最后一个是 (i+k)L 了为删除前 的 个 ...