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 ...
随机推荐
- php底层变量存储
变量存储 php的变量使用一个结构体 zval来保存的,在Zend/zend.h中我们可以看到zval的定义 struct _zval_struct { /* Variable information ...
- Task执行多次
项目中,曾经出现过启动时数据库连接数瞬间增大,当时并没有注意该问题. 后期,由于Task任务多次执行,才着手查看这个问题,经排查,由于tomcat中webapp配置多次,导致webapp被扫描多次(配 ...
- (错误)启动ActiveMQ报错:Transport Connector could not be registered in JMX: java.io.IOException: Failed to bind to server socket: stomp://0.0.0.0:61613?
一.错误报告 很明显,端口被占用 二.解决方法 1. 在cmd中输入 netstat -ano 查看61613端口被占用情况,如果有其他进程使用,则使用 taskkill /f /pid 进程PID ...
- (一)Activiti简介
一.概念 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构 ...
- centos安装mysql(for 小白)
安装前提: 安装号centos.SecureCRT 安装准备: centos自带数据库Mariadb,先将其移除 下载mysql: 镜像网址:http://mirrors.sohu.com/mysql ...
- 【php socket通讯】php实现http服务
http服务是建立在tcp服务之上的,它是tcp/ip协议的应用,前面我们已经实现了tcp服务,并且使用三种不同的方式连接tcp服务 php中连接tcp服务的三种方式 既然http也是tcp应用层的一 ...
- linux命令启动关闭firewalld防火墙,添加端口
firewalld管理防火墙常用命令 1.查看防火墙的状态 [root@localhost HMK]# firewall-cmd --state 查看防火墙的运行状态 not running [r ...
- 有选择性的启用SAP UI5调试版本的源代码
在低版本的SAP UI5应用中,我们一旦切换成调试模式,那么应用程序源代码和UI5框架程序的源代码的调试版本都会重新加载,耗时很长. 我最近发现UI5新版本1.66.1提供了选择性加载调试版本的源代码 ...
- 阿里高级架构师教你如何使用Spring Cloud Ribbon重试请求
在微服务调用中,一些微服务圈可能调用失败,通过再次调用以达到系统稳定性效果,本文展示如何使用Ribbon和Spring Retry进行请求再次重试调用. 在Spring Cloud中,使用load b ...
- C++自问
1.forwarding reference 2.move 3. map的内部实现 rb tree,但rbtree优点是什么?使用情况?和b+有啥区别? 4.顺序容器和关联容器的区别: 本质区别是顺序 ...