Uva1377
/*
在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的更多相关文章
- Win7_Ultimate + VS2010 + openGL_MFC单文档应用开发框架搭建步骤
Win7_Ultimate + VS2010 + openGL单文档应用开发框架搭建步骤 上一个配置是基于OpenGL的开发工具配置的,下面就是基于Vs2010的MFC单文档应用开发. 通过网上查找资 ...
随机推荐
- animate旋转动画练习,css3形变练习
<!DOCTYPE html> <!-- saved from url=(0048)http://yinjiazeng.github.io/test/dial/index.html ...
- linux应用之开机自启动方法总结
1.把启动程序的命令添加到/etc/rc.d/rc.local文件中 CentOS系统下管理开机自启动的配置文件是/etc/rc.d/rc.local,所以只需编辑这个文件,在里面加入相应的启动命令即 ...
- Spring MVC文件上传下载工具类
import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import ...
- Sox语音转换的相关知识
SoX-linux 里操作音频的瑞士军刀 Sox是最为著名的Open Source声音文件 格式转换工具.已经被广泛移植到Dos.windows.OS2.Sun.Next.Unix.Linux等多个操 ...
- java自定义类型 作为HashMap中的Key值 (Pair<V,K>为例)
由于是自定义类型,所以HashMap中的equals()方法和hashCode()方法都需要自定义覆盖. 不然内容相同的对象对应的hashCode会不同,无法发挥算法的正常功能,覆盖equals方法, ...
- 关于qwerta
性别女 爱好男 有时喜欢装成男孩子混迹于OI圈. 就读于长沙市MD中学 是个剧毒蒻蒻蒻. 以 qwerta['kwɜ:rtɑ] 的ID混迹于各大OJ,但是在其它地方通常用qwertaya(重名率太高了 ...
- ACM学习历程—POJ1151 Atlantis(扫描线 && 线段树)
Description There are several ancient Greek texts that contain descriptions of the fabled island Atl ...
- Codeforces round 396(Div. 2) 题解
Problem A 题目大意 给定两个字符串,要求构造出一个最长的一个串满足:这个串是其中一个串的字序列并且不是另一个串的子序列.输出长度.\((len \leq 10^5)\) 题解 千万年死在读题 ...
- nginx 轮询模式 nginx_upstream_jvm_route 插件安装
使用nginx_upstream_jvm_route插件的目的是为了保证在轮询机制下的session的共享 前提:源码方式安装nginx.patch命令 1.下载nginx_upstream_jvm_ ...
- android和iOS平台的崩溃捕获和收集
转自:http://www.cnblogs.com/lancidie/archive/2013/04/13/3019349.html 通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常,以便开发人 ...