UVA - 11754 Code Feat (分块+中国剩余定理)
对于一个正整数N,给出C组限制条件,每组限制条件为N%X[i]∈{Y1,Y2,Y3,...,Yk[i]},求满足条件的前S小的N。
这道题很容易想到用中国剩余定理,然后用求第k小集合的方法输出答案。但是一取模,孰大孰小就不好控制了,所以行不通。直接枚举所有情况的话,总方案数(所有k的乘积)高达C*k,显然也是不行的。
还有一种方法是枚举所有可能的N,然后检验是否满足条件。对于每个满足条件的N,任取某个限制条件i,对于其中某个余数j,都可以写成X[i]*t+Y[i][j]的形式。复杂度未知,但总方案数很大的时候可以较快得出答案。
可以用分块的思想,设定一个合适的阈值,当总方案数超过某个阈值的时候用枚举,否则就用中国剩余定理。
#include<bits/stdc++.h> using namespace std;
typedef long long ll;
const ll N=+;
vector<ll> v[N],w;
set<ll> st[N];
ll m[N],e[N],n,k,K; void exgcd(ll a,ll b,ll& x,ll& y,ll& g) {
if(!b)x=,y=,g=a;
else exgcd(b,a%b,y,x,g),y-=x*(a/b);
} ll inv(ll x,ll mod) {
ll a,b,g;
exgcd(x,mod,a,b,g);
return (a+mod)%mod;
} ll check(ll x) {
for(ll i=; i<n; ++i)if(!st[i].count(x%m[i]))return ;
return ;
} void solve1() {
ll p=;
for(ll i=; i<n; ++i)if(v[i].size()*m[p]<v[p].size()*m[i])p=i;
for(ll t=; w.size()<k; ++t)
for(ll i=; i<v[p].size()&&w.size()<k; ++i)
if(t*m[p]+v[p][i]&&check(t*m[p]+v[p][i]))w.push_back(t*m[p]+v[p][i]);
} void solve2() {
ll M=;
for(ll i=; i<n; ++i)M*=m[i];
for(ll i=; i<n; ++i)e[i]=M/m[i]*inv(M/m[i],m[i]);
for(ll S=; S<K; ++S) {
ll S2=S,x=;
for(ll i=; i<n; ++i) {
ll j=S2%v[i].size();
S2/=v[i].size();
x=(x+e[i]*v[i][j])%M;
}
w.push_back(x?x:x+M);
}
sort(w.begin(),w.end());
w.resize(unique(w.begin(),w.end())-w.begin());
for(ll i=; w.size()<k; ++i)w.push_back(w[i]+M);
} int main() {
while(scanf("%lld%lld",&n,&k)&&n) {
for(ll i=; i<N; ++i)v[i].clear();
for(ll i=; i<N; ++i)st[i].clear();
K=;
for(ll i=; i<n; ++i) {
scanf("%lld",&m[i]);
ll t;
scanf("%lld",&t);
K*=t;
while(t--) {
ll x;
scanf("%lld",&x);
v[i].push_back(x);
st[i].insert(x);
}
sort(v[i].begin(),v[i].end());
}
w.clear();
K>?solve1():solve2();
for(ll i=; i<k; ++i)printf("%lld\n",w[i]);
printf("\n");
}
return ;
}
UVA - 11754 Code Feat (分块+中国剩余定理)的更多相关文章
- uva 11754 Code Feat (中国剩余定理)
UVA 11754 一道中国剩余定理加上搜索的题目.分两种情况来考虑,当组合总数比较大的时候,就选择枚举的方式,组合总数的时候比较小时就选择搜索然后用中国剩余定理求出得数. 代码如下: #includ ...
- UVA 11754 - Code Feat(数论)
UVA 11754 - Code Feat 题目链接 题意:给定一个c个x, y1,y2,y3..yk形式,前s小的答案满足s % x在集合y1, y2, y3 ... yk中 思路:LRJ大白例题, ...
- UVA 11754 Code Feat (枚举,中国剩余定理)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud C Code Feat The government hackers at C ...
- UVA 11754 Code Feat 中国剩余定理+枚举
Code FeatUVA - 11754 题意:给出c个彼此互质的xi,对于每个xi,给出ki个yj,问前s个ans满足ans%xi的结果在yj中有出现过. 一看便是个中国剩余定理,但是同余方程组就有 ...
- Uva 11754 Code Feat
题意概述: 有一个正整数$N$满足$C$个条件,每个条件都形如“它除以$X$的余数在集合$\{Y_1, Y_2, ..., Y_k\}$中”,所有条件中的$X$两两互质, 你的任务是找出最小的S个解. ...
- UVA 11754 Code Feat 中国剩余定理+暴力
lrj白书例题,真好 #include <stdio.h> #include <iostream> #include <vector> #include <m ...
- UVa 11754 (中国剩余定理 枚举) Code Feat
如果直接枚举的话,枚举量为k1 * k2 *...* kc 根据枚举量的不同,有两种解法. 枚举量不是太大的话,比如不超过1e4,可以枚举每个集合中的余数Yi,然后用中国剩余定理求解.解的个数不够S个 ...
- UVA 11754 (暴力+中国剩余定理)
题目链接: http://www.bnuoj.com/v3/problem_show.php?pid=20172 题目大意:有C个模方程,每个方程可能有k余数,求最小的S个解. 解题思路: 看见模方程 ...
- P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT
EXCRT 不保证模数互质 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\equiv b_2\ ({\rm mod}\ a_2) \\ ... ...
随机推荐
- LeetCode:寻找数组的中心索引【668】
LeetCode:寻找数组的中心索引[668] 题目描述 给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和 ...
- 06 Spring框架 依赖注入(三)多配置文件
在Spring前几节的学习中我们都使用了一个配置文件,就像struts2中可以包含其他的配置文件,我们能不能使用多个配置文件呢(在工程比庞大,配置比较多的时候)? Spring多配置文件分为两种: 平 ...
- 流量分析系统---echarts模拟迁移中 ,geocoord从后台获取动态数值
由于在echarts的使用手册中说了 {Object} geoCoord (geoCoord是Object类型) ,所以不能用传统的字符串拼接或数组的方式赋值.在后台的controller中用Map& ...
- list列表、tuple元组、range常用方法总结
list 列表(数组),是可迭代对象,列表是可变的所以列表的方法都是在列表本身更改的.里面看可以放各种数据类型的数据,可存储大量数据 连接列表可以使用 + 或 extend() a = [1, 3, ...
- OpenGL学习进程(6)第四课:点、边和图形(一)点
本节是OpenGL学习的第四个课时,下面介绍OpenGL点的相关知识: (1)点的概念: 数学上的点,只有位置,没有大小.但在计算机中,无论计算精度如何提高,始终不能表示一个无穷小的点 ...
- 每天一个Linux命令(42)watch命令
watch命令以周期性的方式执行给定的指令,指令输出以全屏方式显示. (1)用法: 用法: watch [参数] [命令] (2)功能: 功能: 可 ...
- Gerrit使用感受
CodeReivew好工具,可以随业务需求灵活配置权限等.
- 求两个有序序列合并成新有序序列的中位数,求第k小数
此算法涉及一个重要数学结论:如果A[k/2-1]<B[k/2-1],那么A[0]~A[k/2-1]一定在第k小的数的序列当中,可以用反证法证明. 算法思想如下: 1,假设A长度为m,B长度为n, ...
- STL视频_02
[01:05]主要讲一下几个要点: 1.模板.函数模板 类模板 以及它们的用法 2.容器.什么是容器 和 容器的分类,各种容器的数据结构 3.容器vector的具体用法,包括迭代器的具体用法 [01: ...
- DB2数据库管理常用操作
查询db2数据库相关配置(日志,字符集) db2 get db cfg for uppdb 查询db2数据库db2codepage db2set 在进行数据库导入导出的时候,可能要修改db2codep ...