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 ...
随机推荐
- bzoj3673: 可持久化并查集 by zky&&3674: 可持久化并查集加强版
主席树可持久化数组,还挺好YY的 然而加强版要路径压缩.. 发现压了都RE 结果看了看数据,默默的把让fx的父亲变成fy反过来让fy的父亲变成fx 搞笑啊 #include<cstdio> ...
- Swift_ios_二进制,十进制,十六进制之间的转换
这里所说的转换,并不是Swift中字面量之间的转换.如果是字面量之间的转换,ios系统中已经自动帮我们转换了. 例如let number1:Int = 8let number2:Int = 0b100 ...
- Python使用装饰器自动调用父类__init__
众所周知,Python中class的构造函数实际是__new__(),但是如果我们执行p1=Point()的时候,不仅会调用Point的__new__方法,而且会调用Point的__init__方法. ...
- Windows显示我的电脑到桌面以及给一些程序设置快捷键
Windows显示我的电脑到桌面,我测试的是windows server 2012和windows10 1.按Win(键盘上的微软徽标键)+R,输入: rundll32.exe shell32.dl ...
- numpy快速指南
Quickstart tutorial 引用https://docs.scipy.org/doc/numpy-dev/user/quickstart.html Prerequisites Before ...
- POJ 3275 Floyd传递闭包
题意:Farmer John想按照奶牛产奶的能力给她们排序.现在已知有N头奶牛(1 ≤ N ≤ 1,000).FJ通过比较,已经知道了M(1 ≤ M ≤ 10,000)对相对关系.每一对关系表示为&q ...
- C - Oleg and shares
Problem description Oleg the bank client checks share prices every day. There are n share prices he ...
- 动画库animate.css的用法
简介 animate.css是一个来自国外的 CSS3 动画库,它预设了引起弹跳(bounce).摇摆(swing).颤抖(wobble).抖动(shake).闪烁(flash).翻转(flip).旋 ...
- 图的连通性问题的小结 (双连通、2-SAT)
图的连通性问题包括: 1.强连通分量. 2.最小点基和最小权点基. 3.双连通. 4.全局最小割. 5.2-SAT 一.强连通分量 强连通分量很少单独出题,一般都是把求强连通分量作为缩点工具. 有三种 ...
- bootstrap中container 类和container-fluid类的区别container类所谓的自适应也是通过margin的改变来完成,container-fluid类的百分百宽度是指在固有的15px的padding前提下宽度总是当前视口的宽度。
container 类和container-fluid类的区别体现在是否有随视口宽度改变的margin存在. container类所谓的自适应也是通过margin的改变来完成,container-fl ...