能量晶石
2015-12-24 10:44
309 查看
Jack 正在组装自己的飞行器,他希望从手中的一些很奇怪的能量晶石中,选择一块,作为飞行器引擎的能量来源。
每个晶石,都用一连串的数字进行标注。 可以整块使用,也可以通过对晶石的切割,得到不同强度的能量输出。
切割后,各个晶石片段能量强度之和计算方式为:各个晶石片段上的整数之和。(不可把单个数字切割成 2 半)。
由于飞行器引擎所能承受的能量强度存在上限,切割完的晶石片段,能量强度之和不能超过上限,否则将导致引擎过载。同时,为节省晶石的浪费, Jack 希望一块晶石切下来的所有片段,都必需加入到飞行器引擎中,不能丢弃。
例:晶石“ 352143”,可分割为 35,214,3。它们的能量强度之和为 252。也可分割为
352,143,能量强度和为 495
Jack 希望知道,在不导致引擎过载的同时,手中的这些能量晶石, 各自能够达到的最
接近引擎上限的能量强度是多少。
每个晶石,都用一连串的数字进行标注。 可以整块使用,也可以通过对晶石的切割,得到不同强度的能量输出。
切割后,各个晶石片段能量强度之和计算方式为:各个晶石片段上的整数之和。(不可把单个数字切割成 2 半)。
由于飞行器引擎所能承受的能量强度存在上限,切割完的晶石片段,能量强度之和不能超过上限,否则将导致引擎过载。同时,为节省晶石的浪费, Jack 希望一块晶石切下来的所有片段,都必需加入到飞行器引擎中,不能丢弃。
例:晶石“ 352143”,可分割为 35,214,3。它们的能量强度之和为 252。也可分割为
352,143,能量强度和为 495
Jack 希望知道,在不导致引擎过载的同时,手中的这些能量晶石, 各自能够达到的最
接近引擎上限的能量强度是多少。
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; int func(char sc[],char b[],int flag) { int last=-1,t,r,m,sum=0,len=strlen(sc); char part[20]; for(t=0;t<len;t++) { if(b[t]=='1') { r=0; for(m=last+1;m<=t;m++) { part[r++]=sc[m]; } part[r]='\0'; sum+=atoi(part); if(flag==1) printf("%d ",atoi(part)); last=t; } } if(last!=len-1) { r=0; for(m=last+1;m<len;m++) { part[r++]=sc[m]; } part[r]='\0'; sum+=atoi(part); if(flag==1) printf("%d\n",atoi(part)); } return sum; } int main() { int n,i,j,limit,Q,t,len,sum,a[131072],max=-1,m; char b[20],num[20],s[20],ans[20]; scanf("%d",&Q); for(j=0;j<Q;j++) { scanf("%s %d",num,&limit); m=0; n=strlen(num)-1; max=-1; for(i=0;i<int(pow(2,n));i++)//生成所有切割方案 { itoa(i,b,2); if(strlen(b)<n) { len=strlen(b); for(t=0;t<n-len;t++) s[t]='0'; s[t]='\0'; strcat(s,b); strcpy(b,s); } sum=func(num,b,0); if(sum<=limit&&sum>=max) { a[m++]=sum; max=sum; strcpy(ans,b); } } if(m>0) sort(a,a+m);//若有多种方案,能量和均能达到最接近引擎上限 if(m==0) { printf("Error\n"); } else if(a[m-1]==a[m-2]&&m>1) { printf("Oooops\n"); } else { sum=func(num,ans,1); } } return 0; }
相关文章推荐
- mysql 点赞取消点赞语句
- CodeForces 572A,B,C
- 策略模式【 Strategy Pattern】
- treeviw的展开属性
- vs打开utf8编码文件
- iOS开发-如何把广告,图片通过代码加到Screen上
- redis安装
- 根据页面长度实现阅读进度条原理
- Linux 内核list使用
- 处理iOS键盘通知
- 关于百度地图 key 的问题
- android webview显示html代码出现乱码的问题解决
- update-rc.d的具体用法
- [转]Worksheet.Change Event (Excel)
- 站长VS微商 你选择哪个?
- 关于mysql的limit用于分页查询的优化
- Eclipse修改项目名称
- <学习笔记> html事件(源w3school)
- Java 带参数构造函数
- 第三章:C语言特性