UVA 4683 - Find The Number
这题的意思是给一个集合,最多有12个元素。
找出仅仅能被集合中一个仅且一个数整除的第n个数。
(n <= 10^15)。
我用容斥原理做的。先把能被每一个数整除的元素个数累加,当然会有反复的。若某个数由集合中两个数组成,那么要减去全部这个数的整数倍,并且要减两次,由于他是两个数的公约数,而当某个数是当中三个数的公约数,那他一定也是两个数的公约数,这样就多减了c[k][2]个,就得加上。以此类推。
要求第n个数,题目说答案最大是10^15,我以10^15为界限进行二分。对于[1,m]内若符合条件的数是res个。若res >= n,那么high = mid-1,否则low = mid+1。
可是我的代码没过,无限TLE。。代码先贴这里。希望路过的大神给予指点。
- #include <stdio.h>
- #include <iostream>
- #include <map>
- #include <set>
- #include <bitset>
- #include <list>
- #include <stack>
- #include <vector>
- #include <math.h>
- #include <string.h>
- #include <queue>
- #include <string>
- #include <stdlib.h>
- #include <algorithm>
- //#define long long __int64
- //#define LL long long
- #define eps 1e-9
- #define PI acos(-1.0)
- //typedef __int64 LL;
- using namespace std;
- const long long Max = 1000000000000000;
- int k;
- long long n;
- int a[15];
- long long C[15][15];
- long long gcd(long long a, long long b)
- {
- if(b == 0) return a;
- return gcd(b,a%b);
- }
- long long lcm(long long a, long long b)
- {
- return a/gcd(a,b)*b;
- }
- void init()
- {
- memset(C,0,sizeof(C));
- for(int i = 1; i <= 12; i++)
- {
- for(int j = 0; j <= i; j++)
- {
- if(j == 0 || j == i)
- C[i][j] = 1;
- else if(j == 1)
- C[i][j] = i;
- else
- C[i][j] = C[i-1][j-1] + C[i-1][j];
- }
- }
- }
- long long cal(long long m)
- {
- long long ans = 0;
- for(int i = 1; i < (1<<k); i++)
- {
- int cnt = 0;
- long long mul = 1;
- for(int j = 0; j < k; j++)
- {
- if(i&(1<<j))
- {
- cnt++;
- mul = lcm(mul,a[j]);
- }
- }
- if(cnt&1)
- ans += C[k][cnt-1]*(m/mul);
- else
- ans -= cnt*(m/mul);
- }
- return ans;
- }
- int main()
- {
- int test;
- init();
- scanf("%d",&test);
- while(test--)
- {
- scanf("%d %I64d",&k,&n);
- for(int i = 0; i < k; i++)
- {
- scanf("%d",&a[i]);
- }
- long long low = 0,high = Max;
- while(low <= high)
- {
- long long mid = (low + high)/2;
- long long res = cal(mid);
- if(res >= n)
- high = mid-1;
- else
- low = mid+1;
- }
- printf("%I64d\n",low);
- }
- return 0;
- }
UVA 4683 - Find The Number的更多相关文章
- POJ-3070Fibonacci(矩阵快速幂求Fibonacci数列) uva 10689 Yet another Number Sequence【矩阵快速幂】
典型的两道矩阵快速幂求斐波那契数列 POJ 那是 默认a=0,b=1 UVA 一般情况是 斐波那契f(n)=(n-1)次幂情况下的(ans.m[0][0] * b + ans.m[0][1] * a) ...
- UVA - 10689 Yet another Number Sequence 矩阵快速幂
Yet another Number Sequence Let’s define another number sequence, given by the foll ...
- uva 10077 - The Stern-Brocot Number System
想法: 初始化三個數L=0/1, M=1/1, R=1/0,設輸入的分數為a: 如果a<M,那麼要往左邊走, R = M; M = (L分子+M分子)/(L分母+M分母); 如果a& ...
- UVA 10689 Yet another Number Sequence
简单矩阵快速幂. if(m==1) MOD=10; if(m==2) MOD=100; if(m==3) MOD=1000; if(m==4) MOD=10000; 剩下的就是矩阵快速幂求斐波那契数列 ...
- 【UVa】11882 Biggest Number(dfs+剪枝)
题目 题目 分析 典型搜索,考虑剪枝. 统计一下联通分量. 1.本位置能够达到所有的点的数量加上本已有的点,还没有之前的结果长,直接返回. 2.当本位置能够达到所有的点的数量加上本已有的点与之 ...
- UVA - 10689 Yet another Number Sequence (矩阵快速幂求斐波那契)
题意:已知f(0) = a,f(1) = b,f(n) = f(n − 1) + f(n − 2), n > 1,求f(n)的后m位数. 分析:n最大为109,矩阵快速幂求解,复杂度log2(1 ...
- UVA 10689 Yet another Number Sequence 矩阵快速幂 水呀水
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...
- KUANGBIN带你飞
KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题 //201 ...
- 「kuangbin带你飞」专题十九 矩阵
layout: post title: 「kuangbin带你飞」专题十九 矩阵 author: "luowentaoaa" catalog: true tags: mathjax ...
随机推荐
- Hdu-6253 2017CCPC-Final K.Knightmare 规律
题面 题意:给你一个无限大的棋盘,一个象棋中的马,问你这个马,飞n步后,可能的位置有多少种? 题解:看到题,就想先打表试试,于是先写个暴力(枚举每个位置,是马就飞周围8个格子,注意不要在同个循环里把格 ...
- POJ-3061 Subsequence 二分或尺取
题面 题意:给你一个长度为n(n<100000)的数组,让你找到一个最短的连续子序列,使得子序列的和>=m (m<1e9) 题解: 1 显然我们我们可以二分答案,然后利用前缀和判断 ...
- LeetCode.2-两个数字相加(Add Two Numbers)
这是悦乐书的第340次更新,第364篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第1题(顺位题号是2).给定两个非空链表,表示两个非负整数. 数字以相反的顺序存储, ...
- php对文件/目录操作的基础知识(图解)
具体的如下图所示:
- Install opencv on Centos
研究centos 有很长一段时间了,一直没有写过这方面的感觉,今天在看到网友的一篇文章时,结合亲身体会就下面安装opencv的一些步骤与大家共享. CentOS OpenCV已被广泛应用但是也在不断的 ...
- 使用Axis2方式发布webService实例说明
1.简单的pojo方式: 不需要写配置文件,直接把class文件拷贝到axis2的WEB-INF目录下的poji文件夹下即可.但其局限性表现在,实现类不能有包声明,这在实际开发过程中使用较少,这里不做 ...
- Python中OpenCV2. VS. CV1
OpenCV的2.4.7.版本生成了python的CV2模块,可以直接载入: 有兴趣的可以参考这个教程:http://blog.csdn.net/sunny2038/article/details/9 ...
- CImage类的使用介绍!
链接参考:http://www.cnblogs.com/juncheng/articles/1600730.html CImage是MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG.GIF. ...
- CorelDRAW X8官方正版特惠下载
CorelDRAW X8自发布以来,价格居高不下,这也使一众忠粉望而却步,之前看过CorelDRAW做活动,都是X6\X7这些比较早的版本,比较新的版本也没做什么优惠,不过还好看了一下,CorelDR ...
- 洛谷P3807 【模板】卢卡斯定理_组合数学模板
Code: #include<cstdio> using namespace std; typedef long long LL; const int maxn=1000000+2; LL ...