/*
在n个刻度和他们的差里挑不超过7个刻度,0是固定的,最大的刻度肯定是最大值,然后剩下的dfs挑。
*/
#include<bits/stdc++.h> #define inf 0x3f3f3f3f const int maxn=; using namespace std; int n,m,h,maxx,minx,icase,tar_size,a[+],ans[+],tar[+],flag[maxn+]; int b[+]; int fla[maxn+],fla1[maxn+]; int add(int x,int siz){
int cnt=;
for(int i=;i<siz;i++){
if(fla1[abs(a[i]-x)]){
fla[abs(a[i]-x)]++;
if(fla[abs(a[i]-x)]==) cnt++;
}
// if(fla1[x]&&a[i]!=0) {
// fla[x]++;
// if(fla[x]==1) cnt++;
// }
}
return cnt;
} void dele(int x,int siz){
//int cnt=0;
for(int i=;i<siz;i++){
if(fla1[abs(a[i]-x)]){
// if(fla[abs(a[i]-x)]>=1)
fla[abs(a[i]-x)]--;
}
//if(fla1[x]&&a[i]!=0) fla[x]--;
}
//printf("%d\n",cnt);
} void dfs(int now,int res,int index){
//printf("%d\n",res);
if(now>=&&res<tar_size) return ;
if(now<=&&res==tar_size){
//printf("0 ");
//for(int i=0;i<now;i++)
//printf("%d ",a[i]);
//printf("\n");
//set<int>::iterator it=fla.begin();
//for(;it!=fla.end();++it){
// printf("%d ",*it);
//}
// printf("\n");
//printf("%d %d %d\n\n",now,tar_size,res);
if(minx>now) {
minx=now;
for(int i=;i<now;i++) ans[i]=a[i];
}
return ;
}
for(int i=index;i<h;i++){
//a[now]=tar[i];
//if(tar[i]==maxx||tar[i]==0) continue;
int s=add(tar[i],now);
if(!s) {dele(tar[i],now);continue;}
a[now]=tar[i];
//printf("%d %d\n",res+1,fla.size());
//int s=fla.size();
// s=(add(tar[i],now)-s);
//printf("%d\n",s);
//if(!s) continue;
dfs(now+,res+s,i+);
dele(tar[i],now);
}
} int main()
{
while(scanf("%d",&n)!=EOF&&n){
printf("Case %d:\n",++icase);
minx=inf,maxx=,memset(a,,sizeof(a)),memset(tar,,sizeof(tar)),memset(flag,,sizeof(flag));
memset(b,,sizeof(b)),memset(fla,,sizeof(fla)),memset(fla1,,sizeof(fla1));
h=;
int q=;
for(int i=;i<n;i++) {
scanf("%d",&m);
if(!flag[m]) tar[h++]=m,b[q++]=m,flag[m]=,fla1[m]=;
maxx=max(maxx,m);
}
sort(tar,tar+h);
sort(b,b+h);
//for(int i=0;i<h;i++) printf("%d\n",b[i]);
tar_size=h;
for(int i=;i<tar_size;i++){
for(int j=i+;j<tar_size;j++){
if(!flag[tar[j]-tar[i]]) tar[h++]=tar[j]-tar[i],flag[tar[j]-tar[i]]=;
}
}
//printf("%d %d\n",tar_size,h);
sort(tar,tar+h);
//for(int i=0;i<h;i++) printf("%d\n",tar[i]);
//printf("%d\n",fla.size());
a[]=;
fla[]=;
dfs(,,);
sort(ans,ans+minx);
printf("%d\n",minx);
// printf("0");
for(int i=;i<minx;i++) {
//if(ans[i]!=maxx&&ans[i]!=0)
if(!i)
printf("%d",ans[i]);
else printf(" %d",ans[i]);
}
printf("\n");
//printf(" %d\n",maxx);
}
return ;
}

Uva1377的更多相关文章

  1. Win7_Ultimate + VS2010 + openGL_MFC单文档应用开发框架搭建步骤

    Win7_Ultimate + VS2010 + openGL单文档应用开发框架搭建步骤 上一个配置是基于OpenGL的开发工具配置的,下面就是基于Vs2010的MFC单文档应用开发. 通过网上查找资 ...

随机推荐

  1. ES禁用_source不会影响聚合

    From Elasticsearch's website: The _source field contains the original JSON document body that was pa ...

  2. 线程绑定CPU核-sched_setaffinity

    CPU亲合力就是指在Linux系统中能够将一个或多个进程绑定到一个或多个处理器上运行. 一个进程的CPU亲合力掩码决定了该进程将在哪个或哪几个CPU上运行.在一个多处理器系统中,设置CPU亲合力的掩码 ...

  3. 点分治Day2 动态树分治

    蒟蒻Ez3real冬令营爆炸之后滚回来更新blog... 我们看一道题 bzoj3924 ZJOI2015D1T1 幻想乡战略游戏 给一棵$n$个点的树$(n \leqslant 150000)$ 点 ...

  4. android如何查看网卡名和ip

    我们知道,在windows下查看ip地址用ipconfig,在Linux下查看ip地址用ifconfig.今天在使用android查看的时候ifconfig却不管用: 查找网上资料发现,原来默认ifc ...

  5. django orm 操作符

    __gt 大于__gte 大于等于__lt 小于__lte 小于等于__in__exact 精确等于 like 'aaa'__iexact 精确等于 忽略大小写 ilike 'aaa'__contai ...

  6. Ubuntu——跟新flash

    使用命令: apt-get install adobe-flashplugin 即可

  7. 【转】python的复制,深拷贝和浅拷贝的区别

    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有三种方法, alist=[1,2,3,[& ...

  8. [hiho1578]Visiting Peking University

    题意:签到题,不叙述了 解题关键:模拟即可. #include<bits/stdc++.h> #define inf 0x3f3f3f3f using namespace std; typ ...

  9. CodeForces - 1017D Round #502 D. The Wu(状压预处理)

    D. The Wu time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  10. 自定义log4j的appender写es日志

    本篇和大家分享的是自定义log4j的appender,用es来记录日志并且通过kibana浏览es记录:就目前互联网或者一些中大型公司通常会用到第三方组合elk,其主要用写数据到es中,然后通过可视化 ...