zoukankan      html  css  js  c++  java
  • [测试题]打地鼠

    Description

    小明听说打地鼠是一件很好玩的游戏,于是他也开始打地鼠。地鼠只有一只,而且一共有N个洞,编号为1到N排成一排,两边是墙壁,小明当然不可能百分百打到,因为他不知道地鼠在哪个洞。小明只能在白天打地鼠,而且每次打了都觉得好累,感觉再也不会打了,必须休息到第二天才能再次打地鼠,也就是说他每天只有一次打地鼠的机会。

    地鼠非常聪明,为了尽可能的不被打到,它每天晚上都会跑向相邻的两个洞中的一个,如果一边是墙壁就只有往另一边跑,而且它很固执,每天晚上肯定会跑,也就是说不会连续呆在同一个洞。

    尽管小明很累,但是他明白要想拿到一等奖,就必须打到地鼠,所以他想知道怎样才能在最短的天数内保证肯定打到地鼠。

    Input

    输入文件mouse只有一行,该行有一个整数N,表示N个洞并排在一起。地鼠在随机一个洞。

    Output

    输出文件mouse.out只有一行,该行有一个整数,表示小明肯定能打中至少需要的天数。

    Sample Input

    4

    Sample Output

    4

    Hint

    40% n<=10

    100% n<=100.

    题解

       这道题首先是要考虑怎样才能够保证一定能够打中。如果每天选择洞的规律和地鼠移动的规律一样,也就是每天都选前一天相邻的一个洞,那么可以发现,每次你选择的洞口和地鼠所在洞口的距离要么不变,要么增加二或者减少二,按这样从一边墙壁检查到另一边墙壁,如果没有发现地鼠,那就说明地鼠的初始位置和你的初始检查距离为奇数,这个时候再重复检查一次你刚检查过的洞口,那么因为地鼠必须要移动,你们的距离就修改成了偶数,这样再从另一边检查回来,就保证一定能够发现地鼠。这样算下来的结果是$2N$。

      但是可以再分析一下,第一遍扫描的$N$次的意义在与检查你和地鼠的距离是否为偶数,第二次的意义在于把奇数变为偶数。那么第一次完全可以只从$N-1$扫描到$2$(因为地鼠如果在$N$号洞或者$1$号洞与你的距离都为奇数,和第一次的任务没有关系),第二次也从$2$扫描到$N-1$(因为距离如果是偶数那么相遇时肯定是地鼠与你相向运动,也就是地鼠从相遇点后面过来的,所以不可能会在$1$号和$N$号洞相遇)。最后再考虑只有$1$,和$2$两个洞这两种特殊情况。

    来自@Z-Y-Y-S的一个例子:

    (感谢@Z-Y-Y-S!!)

     1 //It is made by Awson on 2017.9.19
     2 #include <map>
     3 #include <set>
     4 #include <cmath>
     5 #include <ctime>
     6 #include <queue>
     7 #include <stack>
     8 #include <cstdio>
     9 #include <string>
    10 #include <vector>
    11 #include <cstdlib>
    12 #include <cstring>
    13 #include <iostream>
    14 #include <algorithm>
    15 #define LL long long
    16 #define Max(a, b) ((a) > (b) ? (a) : (b))
    17 #define Min(a, b) ((a) < (b) ? (a) : (b))
    18 #define Abs(a) ((a) < 0 ? (-(a)) : (a))
    19 #define lowbit(x) ((x)&(-(x)))
    20 using namespace std;
    21 
    22 int n;
    23 void work() {
    24     if (n <= 2) printf("%d
    ", n);
    25     else printf("%d
    ", 2*(n-2));
    26 }
    27 int main() {
    28     while (~scanf("%d", &n))
    29         work();
    30     return 0;
    31 }
  • 相关阅读:
    176. Second Highest Salary
    175. Combine Two Tables
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
    169. Majority Element
    168. Excel Sheet Column Title
    167. Two Sum II
    160. Intersection of Two Linked Lists
    个人博客记录
    <meta>标签
  • 原文地址:https://www.cnblogs.com/NaVi-Awson/p/7553606.html
Copyright © 2011-2022 走看看