BestCoder Round #49 ($) 1001 Untitled
2015-08-02 08:38
417 查看
5339 Untitled
问题描述
输入描述
输出描述
输入样例
输出样例
【思路】
对于一组可能的答案cc,如果先对一个觉小的c_ici取模,再对一个较大的c_jcj取模,那么这个较大的c_jcj肯定是没有用的。因此最终的答案序列中的cc肯定是不增的。那么就枚举选哪些数字,并从大到小取模看看结果是否是00就可以了。时间复杂度O(2^n)O(2n).
代码:
问题描述
有一个整数aa和nn个整数b_1, \ldots, b_nb1,…,bn。在这些数中选出若干个数并重新排列,得到c_1, \ldots, c_rc1,…,cr。我们想保证a \ mod \ c_1 \ mod \ c_2 \ mod \ldots \ mod \ c_r = 0a mod c1 mod c2 mod… mod cr=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≤106). 第二行有nn个正整数b_1, \ldots, b_nb1,…,bn (\forall 1\leq i \leq n, 1 \leq b_i \leq 10^{6}∀1≤i≤n,1≤bi≤106).
输出描述
输出TT行TT个数表示每次询问的答案。
输入样例
2 2 9 2 7 2 9 6 7
输出样例
2 -1
【思路】
对于一组可能的答案cc,如果先对一个觉小的c_ici取模,再对一个较大的c_jcj取模,那么这个较大的c_jcj肯定是没有用的。因此最终的答案序列中的cc肯定是不增的。那么就枚举选哪些数字,并从大到小取模看看结果是否是00就可以了。时间复杂度O(2^n)O(2n).
代码:
#pragma comment(linker, "/STACK:1024000000,1024000000" //C #include <cctype> #include <cerrno> #include <cfloat> #include <ciso646> #include <climits> #include <clocale> #include <cmath> #include <csetjmp> #include <csignal> #include <cstdarg> #include <cstddef> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> //C++ #include <algorithm> #include <bitset> #include <complex> #include <deque> #include <exception> #include <fstream> #include <functional> #include <iomanip> #include <ios> #include <iosfwd> #include <iostream> #include <istream> #include <iterator> #include <limits> #include <list> #include <locale> #include <map> #include <memory> #include <new> #include <numeric> #include <ostream> #include <queue> #include <set> #include <sstream> #include <stack> #include <stdexcept> #include <streambuf> #include <string> #include <typeinfo> #include <utility> #include <valarray> #include <vector> 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 ; 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<n; ++i){ num[i]=read(); } sort(num,num+n,cmp); ans = inf; dfs(a,0,0); if(ans==inf) puts("-1"); else printf("%d\n",ans); } return 0; }
相关文章推荐
- 第11章 对话框_11.2 非模态对话框
- pattern类
- impala一些乱七八糟的整理
- 文件IO流
- 接口(打印机为例)
- 网络连接和集合、泛型
- 当爱情走了!卡卡与卡洛琳终分手 13载甜蜜缘尽
- 14个Xcode中常用的快捷键操作
- *Path Sum
- “一谷补一脏” 五谷是养生的好食材
- 周赛-Heros and Swords
- POJ 2155 Matrix 二维线段树+标记永久化?
- 周赛-Heros and Swords 分类: 比赛 2015-08-02 08:30 11人阅读 评论(0) 收藏
- 异步IO类
- 模式匹配下的For循环
- java中文件的编码(在建立text文本时,如果文件中只写联通或是联,再次打开的时候就会出现乱码,下面就是原理)
- Integer Inquiry
- Scala学习笔记-9
- MongoDB 在windows shell环境下的基本操作和命令的使用示例(二)
- 周赛-KIDx's Pagination