1142 巡逻的士兵

时间限制:1000MS  内存限制:65536K
提交次数:217 通过次数:58

题型: 编程题   语言: G++;GCC

Description

有N个士兵站成一队列, 现在需要选择几个士兵派去侦察。
为了选择合适的士兵, 多次进行如下操作: 如果队列超过三个士兵, 那么去除掉所有站立位置为奇数的士兵,
或者是去除掉所有站立位置为偶数的士兵。直到不超过三个战士,他们将被送去侦察。现要求统计按这样的方法,
总共可能有多少种不同的正好三个士兵去侦察的士兵组合方案。 注: 按上法得到少于三士兵的情况不统计。 1 <= N <= 2的32次方-1

输入格式

有多行,每行一个数字N,最后一行是0

输出格式

对每一行的数字N,输出针对N的方案数

直到没有数字

输入样例

10
4
0

输出样例

2
0






*****************************************************************************************************************

1.题意:将士兵分开,一直分到能游3个人一组的时候结束。

2.解题方法:本题为用分治的方法,将一个很大的数分成很小的数。当一个数为偶数的时候,可以将它分解成两个相等不部分,即一边是奇数一边是偶数。但是当那个数是个奇数的时候可以分成n/2和n-n/2(注:在int型变量省略小数,所以n/2==(n-1)/2)。

****************************************************************************************************************

具体例子分析:

20

|      |

10      10

|   |   |   |

5   5   5   5

| |  | |  | | | |

2 3 2 3  2 3 2 3

所以需要记录每一次分解左右的数,加起来就知道方案数

20(2+2)

|       |

10(1+1)     10(1+1)

|    |      |    |

5(1+0)  5(1+0)   5(1+0)  5(1+0)

| |   | |     | |   | |

2  3  2 3    2 3   2 3

*************************************************************************************************

要用上述的方法需要使用到函数的嵌套;

#include <stdio.h>
int select(unsigned n);
int main()
{
unsigned n;<span style="font-family: Arial, Helvetica, sans-serif;">//n<2^32-1;用unsigned 可以防止溢出</span> while(scanf("%u",&n)!=EOF&&n)
{
printf("%d\n",select(n));
}
return 0;
}
int select(unsigned n)
{
int left=0,right=0,sum=0;
if(n==3)
return 1;
else if(n<3)
return 0;
else
{
if(n%2==0)//判断奇偶数
{
right=select(n/2);//右边的方案个数
left=right;//偶数时,左右的方案个数相等
}
else
{
right=select(n/2);
left=select(n-n/2);
}
sum=left+right;//计算总和
}
return sum;
}
虽然不是最快的方法,但是好理解一些

scau 1142 巡逻的士兵(分治)的更多相关文章

  1. SCAU巡逻的士兵

    1142 巡逻的士兵 Description 有N个士兵站成一队列, 现在需要选择几个士兵派去侦察. 为了选择合适的士兵, 多次进行如下操作: 如果队列超过三个士兵, 那么去除掉所有站立位置为奇数的士 ...

  2. FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别

    游戏人工智能AI中最常听见的就是这三个词拉: FSM 这个不用说拉,百度一大堆解释, 简单将就是将游戏AI行为分为一个一个的状态,状态与状态之间的过渡通过事件的触发来形成. 比如士兵的行为有“巡逻”, ...

  3. Smith Numbers POJ - 1142 (暴力+分治)

    题意:给定一个N,求一个大于N的最小的Smith Numbers,Smith Numbers是一个合数,且分解质因数之后上质因子每一位上的数字之和 等于 其本身每一位数字之和(别的博客偷的题意) 思路 ...

  4. 算法准备-分治算法解决第k位数的线性查找

    由作业士兵排队问题引出的 在一个划分成网格的操场上,n个士兵散乱地站在网格点上.网格点由整数最表(x,y)表示.士兵可以沿着网格边上.下.左.右移动一步,但在同一时刻一个网格上只能有一名士兵.按照军官 ...

  5. [SinGuLaRiTy] 分治题目复习

    [SInGuLaRiTy-1025] Copyrights (c) SinGuLaRiTy 2017. All Rights Reserved. [POJ 1905] 棍的膨胀 (Expanding ...

  6. Big Data(一)分治思想

    按照课程安排,接下来半年,我将会去上一个为期半年的大数据课程.第一课是马士兵老师机构的周老师所讲,这里单纯记录讲课的内容. 问题1: 我有一万个元素(比如数字或单词)需要存储? 如果查找某一个元素,最 ...

  7. [bzoj2152][聪聪和可可] (点分治+概率)

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...

  8. POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22286 ...

  9. [poj1741][tree] (树/点分治)

    Description Give a tree with n vertices,each edge has a length(positive integer less than 1001). Def ...

随机推荐

  1. Flask 启动配置

    数据迁移.

  2. 006/搭建fabric(二)

    准备vmware虚拟机,并安装完ubuntu系统后.继续搭建fabric运行环境... 0.打开终端,切换root身份.目的:后续操作即可不用sudo... 右键->open Terminal- ...

  3. Redux 中间件与函数式编程

    为什么需要中间件 接触过 Express 的同学对"中间件"这个名词应该并不陌生.在 Express 中,中间件就是一些用于定制对特定请求的处理过程的函数.作为中间件的函数是相互独 ...

  4. python基础-5.1几种常见的排序算法

    一.冒泡排序(BubbleSort) 步骤: 比较相邻的元素,如果第一个比第二个大,就交换他们两个. 循环一遍后,最大的数就“浮”到了列表最后的位置. 将剩下的数再次循环,直道所有的排序完成 def ...

  5. python中json的基本使用

    一.json的概念 json是一种通用的数据类型 一般情况下接口返回的数据类型都是json 长得像字典,形式也是k-v{ } 其实json是字符串 字符串不能用key.value来取值,所以要先转换为 ...

  6. csrf原理及flask的处理方法

    csrf原理及flask的处理方法 为什么需要CSRF? Flask-WTF 表单保护你免受 CSRF 威胁,你不需要有任何担心.尽管如此,如果你有不包含表单的视图,那么它们仍需要保护. 例如,由 A ...

  7. IIS 发布网站出现<compilation debug="true" targetFramework="4.6.1">错误

    参考:http://www.mamicode.com/info-detail-1180214.html 原因是环境只安装到.net Framework 4.5 的版本(.net版本向下兼容 ) 解决方 ...

  8. 点击按钮时,显示不同的div内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. FreeSWITCH Explained / Configuration / Proxy Media

    FreeSWITCH has 3 media handling modes: Default: media flows through FS, full processing options - RT ...

  10. 树——binary-tree-postorder-traversal(树的前序遍历)

    问题: Given a binary tree, return the preorder traversal of its nodes' values. For example: Given bina ...