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 中国剩余定理+枚举的更多相关文章

  1. UVA 11754 Code Feat 中国剩余定理+暴力

    lrj白书例题,真好 #include <stdio.h> #include <iostream> #include <vector> #include <m ...

  2. UVA 11754 - Code Feat(数论)

    UVA 11754 - Code Feat 题目链接 题意:给定一个c个x, y1,y2,y3..yk形式,前s小的答案满足s % x在集合y1, y2, y3 ... yk中 思路:LRJ大白例题, ...

  3. UVA 11754 Code Feat (枚举,中国剩余定理)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud C Code Feat   The government hackers at C ...

  4. uva 11754 Code Feat (中国剩余定理)

    UVA 11754 一道中国剩余定理加上搜索的题目.分两种情况来考虑,当组合总数比较大的时候,就选择枚举的方式,组合总数的时候比较小时就选择搜索然后用中国剩余定理求出得数. 代码如下: #includ ...

  5. Uva 11754 Code Feat

    题意概述: 有一个正整数$N$满足$C$个条件,每个条件都形如“它除以$X$的余数在集合$\{Y_1, Y_2, ..., Y_k\}$中”,所有条件中的$X$两两互质, 你的任务是找出最小的S个解. ...

  6. UVA - 11754 Code Feat (分块+中国剩余定理)

    对于一个正整数N,给出C组限制条件,每组限制条件为N%X[i]∈{Y1,Y2,Y3,...,Yk[i]},求满足条件的前S小的N. 这道题很容易想到用中国剩余定理,然后用求第k小集合的方法输出答案.但 ...

  7. UVa 11754 (中国剩余定理 枚举) Code Feat

    如果直接枚举的话,枚举量为k1 * k2 *...* kc 根据枚举量的不同,有两种解法. 枚举量不是太大的话,比如不超过1e4,可以枚举每个集合中的余数Yi,然后用中国剩余定理求解.解的个数不够S个 ...

  8. UVA 11754 (暴力+中国剩余定理)

    题目链接: http://www.bnuoj.com/v3/problem_show.php?pid=20172 题目大意:有C个模方程,每个方程可能有k余数,求最小的S个解. 解题思路: 看见模方程 ...

  9. UVA11754 - Code Feat

    Hooray!  Agent Bauer has shot the terrorists, blown upthe bad guy base, saved the hostages, exposed ...

随机推荐

  1. Oracle VIP说明

    本篇文档,描述说明VIP的作用 1.VIP全称 virtual ip 虚拟IP 2.Oracle为啥要搞个VIP 3.两节点RAC,集群单个节点故障关闭后,VIP漂移否继续对外提供服务 一.模拟RAC ...

  2. Spring基础篇——DI/IOC和AOP原理初识

    DI(Dependency Injection),依赖注入,和我们常听说的另一个概念 IOC(控制反转)其实归根结底实现的功能是相同的,只是同样的功能站在不同的角度来阐述罢了.这里博主就不去过多的辨析 ...

  3. 在docker下SQL Server attach mdf和ldf文件

    (DB:MyPost) USE masterGO-- Create database via attachCREATE DATABASE [MyPost]    ON ( FILENAME = N'C ...

  4. 前端开发 Vue -0前言

    Vue2.0 新手完全填坑攻略——从环境搭建到发布 Vue2 入门,读这篇就够了 Jinkey原创感谢 showonne.yubang 技术指导Demo 地址:http://demo.jinkey.i ...

  5. XML-RPC-2RPC

    远程过程调用协议 RPC一般指远程过程调用协议 RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协 ...

  6. map自定义键值类型

    map自定义键值类型 改变Map的默认比较方式 https://www.cnblogs.com/zjfdlut/archive/2011/08/12/2135698.html 大家知道,STL中的ma ...

  7. 华为Python面试题

    最近在网上偶然看到此题: 有两个序列a,b,大小都为n,序列元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小 经过一番思索,我试着用穷举法 ...

  8. 运行 jar 的问题

    lib stwe.jar 同目录

  9. Xcode8 1 创建coreData的ManagedObject后,报错 linker command failed with exit code 1

    Xcode8 1 创建coreData的ManagedObject后,报错 使用Xcode 8.1 创建coreData的ManagedObject后,报错. duplicate symbol OBJ ...

  10. linux centos安装nginx1.7.4

    原文转自 jerryhe326:https://www.cnblogs.com/jerrypro/p/7062101.html一.安装准备 首先由于nginx的一些模块依赖一些lib库,所以在安装ng ...