设为首页 加入收藏

TOP

BestCoder Round #49 ($) 1001 Untitled
2015-11-21 00:56:32 来源: 作者: 【 】 浏览:1
Tags:BestCoder Round #49 1001 Untitled

?

?

问题描述
有一个整数aa和nn个整数b_1, ldots, b_nb?1??,…,b?n??。在这些数中选出若干个数并重新排列,得到c_1, ldots, c_rc?1??,…,c?r??。我们想保证a  mod  c_1  mod  c_2  mod ldots  mod  c_r = 0a mod c?1?? mod c?2?? mod… mod c?r??=0。请你得出最小的rr,也就是最少要选择多少个数字。如果无解,请输出-1?1.
输入描述
输入文件的第一行有一个正整数 T leq 5T≤5,表示数据组数。

接下去有TT组数据,每组数据的第一行有两个正整数nn和aa (1 leq n leq 20, 1 leq a leq 10^{6}1≤n≤20,1≤a≤10?6??).

第二行有nn个正整数b_1, ldots, b_nb?1??,…,b?n?? (orall 1leq i leq n, 1 leq b_i leq 10^{6}?1≤i≤n,1≤b?i??≤10?6??).
输出描述
输出TT行TT个数表示每次询问的答案。
输入样例
2
2 9
2 7
2 9
6 7
输出样例
2
-1
【思路】

?

对于一组可能的答案cc,如果先对一个觉小的c_ic?i??取模,再对一个较大的c_jc?j??取模,那么这个较大的c_jc?j??肯定是没有用的。因此最终的答案序列中的cc肯定是不增的。那么就枚举选哪些数字,并从大到小取模看看结果是否是00就可以了。时间复杂度O(2^n)O(2?n??).

代码:

?

#pragma comment(linker, /STACK:1024000000,1024000000
//C
#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #include 
                
                  //C++ #include 
                 
                   #include 
                  
                    #include 
                   
                     #include 
                    
                      #include 
                     
                       #include 
                      
                        #include 
                       
                         #include 
                        
                          #include 
                         
                           #include 
                          
                            #include 
                           
                             #include 
                            
                              #include 
                             
                               #include 
                              
                                #include 
                               
                                 #include 
                                
                                  #include
                                  #include 
                                  
                                    #include 
                                   
                                     #include 
                                    
                                      #include 
                                     
                                       #include 
                                      
                                        #include 
                                       
                                         #include 
                                        
                                          #include 
                                         
                                           #include 
                                          
                                            #include 
                                           
                                             #include 
                                            
                                              #include 
                                             
                                               #include 
                                              
                                                #include 
                                               
                                                 #include 
                                                
                                                  using namespace std; #define rep(i,j,k) for(int i=(int)j;i<(int)k;++i) #define per(i,j,k) for(int i=(int)j;i>(int)k;--i) #define lowbit(a) a&-a #define Max(a,b) a>b?a:b #define Min(a,b) a>b?b:a #define mem(a,b) memset(a,b,sizeof(a)) typedef long long LL; typedef unsigned long long LLU; typedef double db; const int N=1e5; const int inf=0x3f3f3f3f; int dir4[4][2]= {{1,0},{0,1},{-1,0},{0,-1}}; int dir8[8][2]= {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}}; int movv[5][2]= {{1,0},{0,1},{0,0},{-1,0},{0,-1}}; inline LL read() { int c=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar();} while(ch>='0'&&ch<='9'){ c=c*10+ch-'0'; ch=getchar();} return c*f; } bool cmp(const int &x,const int &y) { return x>y; } int t,a,n,m; int num[N]; int ans; void dfs(int m,int k,int d)///mod,长度,搜索深度 { if(m==0) { ans=d; return; } if(d>ans){ return ; } if(k>=n){ return; } dfs(m%num[k],k+1,d+1); dfs(m,k+1,d); } int main() { t=read(); while(t--){ n=read(); a=read(); for(int i=0; i
                                                 
                                                  

?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu 1226 超级密码 下一篇nyoj17 单调递增最长子序列(DP)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: