常州模板网站建设,家居网站建设渠道,黄冈论坛黄冈论坛,网页设计就业Description 小明听说打地鼠是一件很好玩的游戏#xff0c;于是他也开始打地鼠。地鼠只有一只#xff0c;而且一共有N个洞#xff0c;编号为1到N排成一排#xff0c;两边是墙壁#xff0c;小明当然不可能百分百打到#xff0c;因为他不知道地鼠在哪个洞。小明只能在白天打… Description 小明听说打地鼠是一件很好玩的游戏于是他也开始打地鼠。地鼠只有一只而且一共有N个洞编号为1到N排成一排两边是墙壁小明当然不可能百分百打到因为他不知道地鼠在哪个洞。小明只能在白天打地鼠而且每次打了都觉得好累感觉再也不会打了必须休息到第二天才能再次打地鼠也就是说他每天只有一次打地鼠的机会。 地鼠非常聪明为了尽可能的不被打到它每天晚上都会跑向相邻的两个洞中的一个如果一边是墙壁就只有往另一边跑而且它很固执每天晚上肯定会跑也就是说不会连续呆在同一个洞。 尽管小明很累但是他明白要想拿到一等奖就必须打到地鼠所以他想知道怎样才能在最短的天数内保证肯定打到地鼠。 Input 输入文件mouse只有一行该行有一个整数N表示N个洞并排在一起。地鼠在随机一个洞。 Output 输出文件mouse.out只有一行该行有一个整数表示小明肯定能打中至少需要的天数。 Sample Input 4 Sample Output 4 Hint 40% n10 100% n100. 题解 这道题首先是要考虑怎样才能够保证一定能够打中。如果每天选择洞的规律和地鼠移动的规律一样也就是每天都选前一天相邻的一个洞那么可以发现每次你选择的洞口和地鼠所在洞口的距离要么不变要么增加二或者减少二按这样从一边墙壁检查到另一边墙壁如果没有发现地鼠那就说明地鼠的初始位置和你的初始检查距离为奇数这个时候再重复检查一次你刚检查过的洞口那么因为地鼠必须要移动你们的距离就修改成了偶数这样再从另一边检查回来就保证一定能够发现地鼠。这样算下来的结果是$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.192 #include map3 #include set4 #include cmath5 #include ctime6 #include queue7 #include stack8 #include cstdio9 #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, n);
25 else printf(%d\n, 2*(n-2));
26 }
27 int main() {
28 while (~scanf(%d, n))
29 work();
30 return 0;
31 } 转载于:https://www.cnblogs.com/NaVi-Awson/p/7553606.html