之江学院第0届 A qwb与支教 容斥与二分

  题目链接: http://115.231.222.240:8081/JudgeOnline/problem.php?cid=1005&pid=0

  题目描述: 给你三个数x, y, z 和 N 输出从1开始数第N个不是x, y, z 任意一个数的倍数的数字

  解题思路: 一看到倍数我先想到素数唯一分解定理, 但是这个想法不结合实际, 因为N <= 10^17所以挨个遍历肯定是不切合实际的, 然后我在想是不是可以可以素数筛法, 更是不行。

        于是上网上看了题解, 既然不是倍数不好求, 那么我就先求好求的倍数, ans = mid/x + mid/y + mid/z - mid/lcm(x, y) - mid/lcm(y,z) - mid/lcm(x,z) + mid/lcm(x,y,z)

        其中ans 是 1 ~ ans 中是x, y, z的倍数的个数。 那么答案就应该是true_ans + N = mid 所以再二分就可以了。 这里有一个小小的trick, 就是说lcm(x,y,z)有可能会爆longlong

        特判一下即可。

  代码: ps: 网站交不了题, 这个代码只是思路的实现, 并不是AC代码。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <vector>
#include <cmath>
using namespace std;typedef long long LL;
const LL MAXN = 1e18;LL lcm(LL a, LL b) {LL GCD = __gcd(a, b);LL ans = a / GCD;if( MAXN / ans < b ) return 0;else return ans * b;
}int main() {LL x, y, z, N;while( ~scanf("%lld%lld%lld%lld", &x, &y, &z, &N) ) {
//        cout << x << " " << y << " " << z << " " << N << endl;LL left = 0;LL right = MAXN;while( left < right-1 ) {
//            cout << left << " " << right << endl;LL mid = (left + right) / 2;LL ans = mid/x + mid/y + mid/z - mid/lcm(x, y) - mid/lcm(x, z) - mid/lcm(y, z);LL t = lcm(lcm(x, y), z);if( t ) ans += mid/t;if( mid - ans >= N ) {right = mid;}else {left = mid;}}printf( "%lld\n", right );}return 0;
}
View Code

  思考: 自己还是太弱了, 我尝试着去想, 但是还是没想出来, 其实这道题很容易往容斥那里去想的, 毕竟都给出来了三个数, 还是倍数题, 二分也不难想, 慢慢总结经验吧

 

转载于:https://www.cnblogs.com/FriskyPuppy/p/7070425.html

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

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

相关文章

java toarray_Java Vector toArray()方法与示例

java toarray向量类toArray()方法 (Vector Class toArray() method) Syntax: 句法&#xff1a; public Object[] toArray();public Object[] toArray(Type[] ty);toArray() method is available in java.util package. toArray()方法在java.util包中可用。 toArray() method i…

Python基础--环境配置、编码风格、基础概念、基本数据类型(1)

#######python########python的基本[rootdesktop ~]# yum install python -y[rootdesktop ~]# python -V ##查看python版本Python 2.7.5[rootdesktop ~]# python --versionPython 2.7.5为什么用/usr/bin/python关于python脚本中的第一行内容 :#!/usr/bin/python 这种写法表示…

java treemap_Java TreeMap keySet()方法与示例

java treemapTreeMap类的keySet()方法 (TreeMap Class keySet() method) keySet() method is available in java.util package. keySet()方法在java.util包中可用。 keySet() method is used to return a set of keys that exists in this TreeMap to be viewed in a Set. keyS…

mysql简单部署_安装部署Mysql实例(最简单快速噢)

题外话作为Mysql DBA&#xff0c;我们平时必须要熟练的一个最最基础的技能&#xff0c;即安装部署Mysql实例&#xff0c;所以本文分享一个快速安装部署Mysql实例的方法。一、环境介质准备Mysql安装包准备服务器准备我这里使用的是centos 7.x&#xff0c;此方法适用于任何其他li…

zabbix增加手机端4个url地址的返回值

由同事提供4个需要监控的url地址GET类型&#xff1a;http://10.15.24.61:809/UserCenterService.svc/getAccountInfo/563/9638POST类型&#xff1a;http://10.15.24.61:809/ProductService/userInvestVarietyYjsList/4/0/563/1/9638/1.0http://10.15.24.61:809/ProductService/…

java timezone_Java TimeZone setID()方法与示例

java timezoneTimeZone类的setID()方法 (TimeZone Class setID() method) setID() method is available in java.util package. setID()方法在java.util包中可用。 setID() method is used to set the id of this TimeZone. setID()方法用于设置此TimeZone的ID。 setID() metho…

iis php mysql 集成_如何在IIS上集成php(iis+mysql+php+zend)

下面介绍下如何在IIS上集成php、这里我就不说cgi了&#xff0c;因为cgi需要系统权限过高&#xff0c;不建议虚拟主机使用&#xff0c;而且cgi程序也很少有人用到&#xff0c;楼主说的要iis6.0结合php安装需要&#xff1a;windows2003系统 安装有IIS6.0php-5.1.1-Win32.zipmysql…

微信红包促销系统开发

如今&#xff0c;互联网的普及&#xff0c;借助网络&#xff0c;营销更加方便。已经有商家开始与我们合作开发新推出的微信二维码红包促销活动了&#xff0c;不仅能达到活动气氛还能进行防伪&#xff0c;同时还可以给自己的公众号沉淀粉丝。微信红包促销系统开发—— 张小龙作为…

hashmap示例_Java HashMap remove()方法与示例

hashmap示例HashMap类的remove()方法 (HashMap Class remove() method) remove() method is available in java.util package. remove()方法在java.util包中可用。 remove() method is used to remove the key-value pairs that exist in this HashMap for the given key eleme…

mysql 中有行号吗_重置SQLite3 / MySQL中的行号计数

sqlite的使用&#xff1a;DELETE FROM your_table;DELETE FROM sqlite_sequence WHERE name your_table;sqlite keeps track of the largest ROWID that a table has ever held using the special sqlITE_SEQUENCE table. The sqlITE_SEQUENCE table is created and initializ…

『科学计算』科学绘图库matplotlib练习

思想&#xff1a;万物皆对象 作业 第一题&#xff1a; import numpy as np import matplotlib.pyplot as pltx [1, 2, 3, 1] y [1, 3, 0, 1]def plot_picture(x, y):plt.plot(x, y, colorr, linewidth2, linestyle--, markerD, labelone)plt.xticks(list(range(-5,5,1)))plt.…

Java BigDecimal min()方法与示例

BigDecimal Class max()方法 (BigDecimal Class max() method) max() method is available in java.math package. max()方法在java.math包中可用。 max() method is used to return the least value of (this BigDecimal) and the given (BigDecimal ob). max()方法用于返回(t…

mysql下载64位 csdn_Linunx-CentOS7安装mysql-5.7.23-linux-glibc2.12-x86_64.tar

2. Linux下安装Mysql2.2 将下载好的mysql安装包通过xftp上传到虚拟机上。2.3 将安装包移动到/usr/local路径下#mv mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz /usr/local2.4 解压安装包#tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz2.5 重命名解压文件或者是建立软…

tempdb 相关总结

/* -- 0. 高速压缩tempdb为初始值 USE tempdb DBCC SHRINKFILE(2,TRUNCATEONLY); */-- 1. tempdb以下未回收的暂时表 ,某些版本号可能查不到数据 use tempdb; select * from sys.objects o where o.type like %U%;-- Chapter 7 - Knowing Tempdb -- christiancoeo.com-- Show t…

java calendar_Java Calendar after()方法与示例

java calendarCalendar类after()方法 (Calendar Class after() method) after() method is available in java.util package. after()方法在java.util包中可用。 after() method is used to check whether this calendar time is after the time denoted by the given Objects …

rust拆掉墙_rust怎么拆自己的墙

rust游戏中可以建造自己的家&#xff0c;但是当建墙的时候总会觉得摆放不好&#xff0c;所以就需要拆除&#xff0c;但是要怎么拆自己的墙呢&#xff0c;下面小编就来为大家介绍一下吧&#xff01;rust怎么拆自己的墙要先放上领地柜&#xff0c;然后在墙刚建好的几分钟内锤子右…

Java BigDecimal add()方法与示例

BigDecimal类的add()方法 (BigDecimal Class add() method) Syntax: 句法&#xff1a; public BigDecimal add(BigDecimal val);public BigDecimal add(BigDecimal val, MathContext ma_co);add() method is available in java.math package. add()方法在java.math包中可用。 …

Analytics API and Customer Data Platform | Segment

Analytics API and Customer Data Platform | Segment

sheets.add示例_Java ArrayDeque add()方法与示例

sheets.add示例ArrayDeque类add()方法 (ArrayDeque Class add() method) add() Method is available in java.lang package. add()方法在java.lang包中可用。 add() Method is used to add the given element at the end of the deque. add()方法用于在双端队列的末尾添加给定元…

arcgis出界址点成果表_界址点成果表打印

#coding: UTF-8importarcpyimportosimporttypesimportstringimportshutilimportsysimportreimportopenpyxl#ws是一个xls的工作表#mode是替换模型&#xff0c;1完全替换&#xff0c;2模糊替换&#xff0c;3 追加替换defreplacexls(ws,mode, text, replaceText):rowsws.max_rowco…