描述

张三丰凭借太极拳成为一代宗师;然而岁月不饶人,他希望找到传人,在有生之年将太极拳传于弟子发扬光大。然而,张三丰的太极拳有一个特点,学的时间越长,忘记的越多。一个弟子学习时间为T,那么他只可以学习到总功力的1/T。假设张三丰计划用S的时间,他可以培养N个弟子,虽然可能每个弟子都无法完全学会,但是只要这N个弟子的总功力之和为1,张三丰就可以将S的时间,分配给这N个弟子,来完成自己的心愿;如果给定S之后,对于任何的N,都无法找到一种有效的分配方案,张三丰只能含恨而终。在这里,S,N和T均必须为正整数。

你的任务是:给定整数S,帮助张三丰找出一个整数N,以及一个分配方案。例如:S为10时,你帮助张三丰找到3个弟子,传授他们武功的时间分别为{2,4,4};S为2时,你无论如何无法找到这样一个方案,张三丰只能含恨而终。

输入

第一行是一个正整数m,表示测试数据的组数。
每组测试数据只有一行,一个正整数S( 1<=s<65536),表示张三丰计划传授太极拳的总时间。

输出

对每组测试数据:如果你可以帮助张三丰找到这样一组方案,首先输出正整数N,然后输出N个数分别代表分配给这N个弟子各自的时间,数据之间用空格隔开;如果你无法找到这样的分配方案,输出-1.

样例输入

3
1
2
10

样例输出

1 1
-1
3 2 4 4

提示注意:这样的方案可能有多组,你只需要输出任何一组;另外,本题目中浮点数的精度控制在1e-6.

 1 #include <cstdio>
 2 #include <string>
 3 #include <memory.h>
 4 #include <algorithm>
 5 #include <stdlib.h>
 6 #include <math.h>
 7 #include <iostream>
 8 #include<queue>
 9 #include <vector>
10 using namespace std;
11
12 const double eps = 1e-6;
13 int s,time0;
14 vector<int> solution;
15 bool flag=false;
16
17 bool is_equal(double a) {
18     if (a <= 1 + eps && a >= 1 - eps)
19         return true;
20     return false;
21 }
22
23 void dfs(double sum,int now,int left) {
24     if (flag)
25         return;
26     if (sum + 1 / (double)left > 1 + eps)
27         return;
28     if (is_equal(sum + 1 / (double)left)) {
29         flag = 1;
30         solution.push_back(left);
31         return;
32     }
33     for (int i = now; i < left-1; i++) {
34         solution.push_back(i);
35         dfs(sum + 1 / (double)i, i, left - i);
36         if (flag)
37             return;
38         solution.pop_back();
39     }
40 }
41
42
43 int main()
44 {
45     int t;
46     scanf("%d", &t);
47     while (t--) {
48         flag = false;
49         solution.clear();
50         scanf("%d", &time0);
51         dfs(0, 1, time0);
52         vector<int>::iterator i1 = solution.begin(),i2=solution.end();
53         if (flag)
54         {
55             printf("%d", solution.size());
56             for (; i1 != i2; i1++)
57                 printf(" %d", *i1);
58             printf("\n");
59         }
60         else
61             printf("-1\n");
62     }
63     return 0;
64 }

View Code

两处剪枝:1.当当前情况肯定超过1时

2.只递增尝试

转载于:https://www.cnblogs.com/yalphait/p/9232114.html

18.06.27 16年期末11:张三丰的传人相关推荐

  1. 18.06.27 POJ1054 The Troublesome Frog

    描述 In Korea, the naughtiness of the cheonggaeguri, a small frog, is legendary. This is a well-deserv ...

  2. 18.06.27 POJ百练 4124海贼王之伟大航路

    描述 "我是要成为海贼王的男人!",路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的艰险历程. 路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着" ...

  3. 在Ubuntu 18.04系统上安装Java 11的方法

    本文将介绍在Ubuntu 18.04/Ubuntu 16.04/Debian 9系统上安装Java 11的方法,可以通过openjdk-11.0.1_linux-x64_bin.tar.gz.jdk- ...

  4. BUAA(2021春)查家谱(士谔书院16级期末)——找最近公共祖先(已上传测试数据和代码)

    BUAA数据结构期末模拟题--查家谱 看前须知 考试回顾 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 测试数据 看前须知 要点介绍和简要声明. 考试回顾 格式控 ...

  5. Ubuntu 18.04(16.04)搭建tftp服务器

    Ubuntu 18.04(16.04)搭建tftp服务器 文章目录 Ubuntu 18.04(16.04)搭建tftp服务器 前言 一.安装tftp server服务器 二.配置/etc/xinetd ...

  6. MIT 18.06 Gilbert Strang《线性代数》L1. 方程组的几何解释

    这里是 MIT 18.06 Gilbert Strang<线性代数>笔记汇总. 从求解线性方程组来开始这门课,教授从"行图像"与"列图像"的角度解方 ...

  7. 2018年06月16日广州珠海长隆海洋世界之旅

    2018年06月16日,端午节假期第一天,从首都机场T1航站楼坐海南航空前往广州.下午3点半到达广州白云机场后先处理了点工作上的事情,然后坐地铁到沙面景区所在的黄沙站.在飞猪上搜了个旅馆然后托行李前往 ...

  8. AI英特尔杯公开课:2019.06.27在线直播《研究生人工智能创新大赛—AI赋能,创新引领》课堂笔记和感悟(二)

    AI英特尔杯公开课:2019.06.27在线直播<研究生人工智能创新大赛-AI赋能,创新引领>课堂笔记和感悟(二) 导读      讲解总体不错,知识点比较基础,适合入门,各种主流框架都有 ...

  9. AI英特尔杯公开课:2019.06.27在线直播《研究生人工智能创新大赛—AI赋能,创新引领》课堂笔记和感悟(一)

    AI英特尔杯公开课:2019.06.27在线直播<研究生人工智能创新大赛-AI赋能,创新引领>课堂笔记和感悟(一) 导读      讲解总体不错,知识点比较基础,适合入门,各种主流框架都有 ...

  10. linux zip 开源工程,7-Zip 18.06 发布,开源数据压缩程序

    7-Zip 18.06 已经发布,7-Zip是一个开源数据压缩程序,主要用于Microsoft Windows操作系统,类似Unix的操作系统如Linux和FreeBSD 7-zip移植版本的p7zi ...

最新文章

  1. 网站推广期间要学会筛选关键词,有利于提升网站推广转化率
  2. python:SyntaxError: invalid syntax报错
  3. 方法调用(车票练习)
  4. .NET Core使用IO合并技巧轻松实现千万级消息推送
  5. leetcode56. 合并区间
  6. node-webkit学习(4)Native UI API 之window
  7. 无法从外部连接MySQL_无法从外部VPC连接到RDS实例(ERROR 2003(HY000)无法连接到MySQL服务器)...
  8. 2017 Multi-University Training Contest - Team 6—HDU6098HDU6106HDU6103
  9. Flutter的Align组件
  10. 达梦和oracle数据库对比学习
  11. SocksCap64全局代理工具使用+Clash使用命令行
  12. 全国地址json android,全国城市+四级城市地址+邮编+区号+经纬度json版
  13. 矩阵基础概念之行列式与秩
  14. 【React】状态管理仓库 原生\封装\第三方
  15. Processing摸索前行(8)-弹珠游戏
  16. 利用matlab求系统的单位阶跃响应,基于Matlab6_5的归一化二阶系统单位阶跃响应的模拟演示...
  17. 事件冒泡 vs 事件捕获 vs 事件委托 的区别
  18. 快速理解论文主旨框架:论文十问法
  19. 自动计数报警器c语言,基于51单片机的光电式计数报警器
  20. 银行业务学习之道:信用卡的具体功能

热门文章

  1. 计算机技术与软件专业技术资格哪个好考,计算机技术与软件专业技术资格好考吗?考试时间?...
  2. 倪静(201550919)第一次作业
  3. c语言else的用法,else的用法
  4. 全国哀悼日,我们也把博客灰一下吧
  5. Nat. Med. :婴儿生命早期肠道病毒组和细菌组的动态
  6. 浅析微信支付:公众平台卡券功能开通、HTML5线上发券(JS-SDK接口)、查看卡券详情
  7. 黑芝麻A1000 设置临时IP连接激光雷达(十)
  8. 基于8086方波锯齿波三角波发生器仿真、基于8086的LCD1602显示仿真设计、基于8086的LED点阵汉字流水显示设计、基于8086的LED中文显示屏显示设计-仿真设计资料【转发】
  9. 一个人的行动力,取决于他的底层信念。
  10. ad中按钮开关的符号_收藏:电路图形符号大全!!!