UVa 11384 - Help is needed for Dexter

来源:互联网 发布:淘宝给的修改评价链接 编辑:程序博客网 时间:2024/05/17 09:38

题目:给你1~n,n个连续的整数,每次可以从里面取出人一个数字减去一个任意数,

            问最少操作多少次可以全变成0。

分析:分治,递推。如果从1~n,任意取k个数字减去p,得到的新数字或者是连续的或者不连续。

            如果不连续,可以映射到连续的,操作次数不变(减数每次加上间隔的长度即可);

            所以都可以看成是连续的处理,而连续的情况下,重复的数字越多越好,因此p为n/2;

说明:清晰证明请查看W4anD0eR96给出的证明:http://blog.csdn.net/w4and0er96/article/details/51731110。

#include <cstdio>int f(int n){return n>1?f(n>>1)+1:1;}int main(){int n;while (~scanf("%d",&n))printf("%d\n",f(n));return 0;}


1 0