UVA 11754 Code Feat 中国剩余定理+枚举
Code FeatUVA - 11754
题意:给出c个彼此互质的xi,对于每个xi,给出ki个yj,问前s个ans满足ans%xi的结果在yj中有出现过。
一看便是个中国剩余定理,但是同余方程组就有ki的乘积种组合,而ki的乘积最大是1e18,直接中国剩余定理肯定不是的,只能对ki的乘积稍微小的时候才能使用。
而当ki的乘积很大时,便说明对于每个xi它的yj都很多,那么我们挑选其中一组xi,设ans=temp*xi+yj,temp不需要枚举到很大便能满足其他的%xi=yj,
至于那组xi的选择,因为我们是要枚举得更快,所有便是yj尽可能的多,xi尽可能的大,也就是ki/xi最小。
最后注意输出格式上,空行的输出。
#include<cstdio>
#include<set>
using namespace std;
typedef long long ll;
const int N=;
int n,m;
ll bb[N],cc[N],cp;
set<ll> ss[N];
ll exgcd(ll a,ll b, ll &x,ll &y){
if(!b){
x=;
y=;
return a;
}
ll g=exgcd(b,a%b,y,x);
y-=a/b*x;
return g;
}
ll inv(ll a,ll c){
ll g,x,y;
g=exgcd(a,c,x,y);
return g== ? (x%c+c)%c : -;
}
ll crt(){
ll ans=,temp;
for(int i=;i<n;i++){
temp=cp/cc[i];
ans+=bb[i]*temp*inv(temp,cc[i]);
if(ans>=cp) ans%=cp;
}
ans=(ans+cp)%cp;
if(!ans) ans+=cp;
return ans;
}
void dfs(int x){
if(x==n){
ss[n].insert(crt());
return ;
}
for(set<ll>::iterator it=ss[x].begin();it!=ss[x].end();it++){
bb[x]=*it;
dfs(x+);
}
}
void solve1(){
cp=;
for(int i=;i<n;i++) cp*=cc[i];
ss[n].clear();
dfs();
ll temp=,ans;
while(m){
for(set<ll>::iterator it=ss[n].begin();it!=ss[n].end();it++){
ans=(*it)+temp*cp;
printf("%lld\n",ans);
m--;
if(!m) break;
}
temp++;
}
}
void solve2(int p){
ll temp=,ans;
while(m){
for(set<ll>::iterator it=ss[p].begin();it!=ss[p].end();it++){
ans=temp*cc[p]+(*it);
if(!ans) continue;
bool flag=true;
for(int i=;i<n;i++){
if(i==p) continue;
if(ss[i].find(ans%cc[i])==ss[i].end()){
flag=false;
break;
}
}
if(flag){
printf("%lld\n",ans);
m--;
}
if(!m) break;
}
temp++;
}
}
int main(){
int k,p;
ll ji,x;
int t=;
while(~scanf("%d%d",&n,&m)){
if(t) printf("\n");
t=;
p=-;ji=;
for(int i=;i<n;i++){
ss[i].clear();
scanf("%lld",&cc[i]);
scanf("%d",&k);
ji*=k;
if(p==-||k*cc[p]<(int)ss[p].size()*cc[i]) p=i;
while(k--){
scanf("%lld",&x);
ss[i].insert(x);
}
}
if(ji<=) solve1();
else solve2(p);
}
return ;
}
巧妙的分类解决
UVA 11754 Code Feat 中国剩余定理+枚举的更多相关文章
- UVA 11754 Code Feat 中国剩余定理+暴力
lrj白书例题,真好 #include <stdio.h> #include <iostream> #include <vector> #include <m ...
- 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 (中国剩余定理)
UVA 11754 一道中国剩余定理加上搜索的题目.分两种情况来考虑,当组合总数比较大的时候,就选择枚举的方式,组合总数的时候比较小时就选择搜索然后用中国剩余定理求出得数. 代码如下: #includ ...
- Uva 11754 Code Feat
题意概述: 有一个正整数$N$满足$C$个条件,每个条件都形如“它除以$X$的余数在集合$\{Y_1, Y_2, ..., Y_k\}$中”,所有条件中的$X$两两互质, 你的任务是找出最小的S个解. ...
- UVA - 11754 Code Feat (分块+中国剩余定理)
对于一个正整数N,给出C组限制条件,每组限制条件为N%X[i]∈{Y1,Y2,Y3,...,Yk[i]},求满足条件的前S小的N. 这道题很容易想到用中国剩余定理,然后用求第k小集合的方法输出答案.但 ...
- 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个解. 解题思路: 看见模方程 ...
- UVA11754 - Code Feat
Hooray! Agent Bauer has shot the terrorists, blown upthe bad guy base, saved the hostages, exposed ...
随机推荐
- Linux 编译kernel有关Kconfig文件详解
ref : https://blog.csdn.net/Ultraman_hs/article/details/52984929 Kconfig的格式 下面截取/drivers/net下的Kconfi ...
- C# 重载,重写,代理,枚举实例
1.日期说法时区不同所取到的值也不同, 多个国的服务器要注意这个玩意 DateTime newDate = DateTime.Now; Console.WriteLine(newDate.ToStri ...
- 线段树 面积并问题 hdu 1255 1542
重点整理面积并的思想 以及PushUp的及时更新 还有就是cover的实现 以及建树每个节点存的信息(每个节点存的是一个线段的信息) http://www.tuicool.com/articles/6 ...
- (十)shiro之自定义Realm以及自定义Realm在web的应用demo
数据库设计 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:/ ...
- CentOS7/RHEL6下,如何查看目录与子目录大小
原文:CentOS7/RHEL6下,如何查看目录与子目录大小 通过强大的[du]命令,可以帮助我们快捷的查看目录的大小,非常实用. du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为:du ...
- C# 高低位获取
ushort Tbed = 2255; byte gao = (byte)(Tbed >> 8); byte di = (byte)(Tbed & 0xff); ushort a ...
- JDBC 学习复习6 学习与编写数据库连接池
之前的工具类DBUtil暴露的问题 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的 ...
- Django-2.0 汉化
1.语言 LANGUAGE_CODE = 'zh-hans' 2.时区 TIME_ZONE = 'Asia/Shanghai' 3.字段名汉化 models.CharFielf(verbose_nam ...
- controller 层 date 类型的参数,SpringBoot自动转换 dateformat
这样客户端提交的String 就可以自动转换为Date了!!!
- 基于【 centos7】五 || GitLab环境搭建
一.基于Docker部署GitLab环境搭建 1.下载镜像 docker pull beginor/gitlab-ce:11.0.1-ce.0 2.创建GitLab 的配置 (etc) . 日志 (l ...