/*
在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. TYOI 1015 Game:博弈 结论【步数之和的奇偶性】

    题意: 明明和亮亮在玩一个游戏. 桌面上一行有n个格子,一些格子中放着棋子. 明明和亮亮轮流选择如下方式中的一种移动棋子(图示中o表示棋子,*表示空着的格子): (1)当一枚棋子的右边是空格子的话,可 ...

  2. html5--2.9新的布局元素(6)-figure/figcaption

    html5--2.9新的布局元素(6)-figure/figcaption 学习要点 了解figure/figcaption元素的语义和用法 通过实例理解figure/figcaption元素的用法 ...

  3. css中字体大小在不同浏览器兼容性问题

    css中使用font-size设定字体大小,不同浏览器的字体height一样,但是width不同,比如在火狐和谷歌中,font-size:20px,字体的高度变为20px,但是谷歌的字体宽度比火狐长 ...

  4. 使用zlib实现gzip格式数据的压缩和解压

    注意代码中的注释部分,这里设置是专门针对gzip的,缺少了就不行了,gzip压缩格式和其他格式的区别就在这里. Bytef 就是 unsigned char,uLong就是 unsigned long ...

  5. bzoj 1954 & poj 3764 The xor-longest Path dfs+Trie

    题目大意 给定一棵n个点的带权树,求树上最长的异或和路径 题解 因为\(xor\)操作满足可结合性,所以有 \(a\text{ }xor\text{ }b\text{ }xor\text{ }b = ...

  6. 闪回之 Flashback Data Archive

    背景:Oracle 11g 中 Flashback Data Archive 特性.将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和 undo 区别开来,这样就可以为 ...

  7. BZOJ3784:树上的路径

    浅谈树分治:https://www.cnblogs.com/AKMer/p/10014803.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem. ...

  8. 普通项目转为maven项目及相关操作说明

    普通项目转为maven项目及相关操作说明 1 原项目简述 如图,一般的项目大致包括三类路径:src,源码路径:test,单元测试路径:lib第三方类包路径. 示例项目中,BaseDao类依赖于mysq ...

  9. No overload for 'OnStartup' matches delegate 'System.Windows.StartupEventHandler'

    No overload for &apos;OnStartup&apos; matches delegate &apos;System.Windows.StartupEvent ...

  10. ACM之Java技巧

    一.Java之ACM注意点 关于四舍五入 小数保留几位:  DecimalFormat df = new DecimalFormat("0.00"); String num = d ...