[CSP

您所在的位置:网站首页 小苹果剧照 [CSP

[CSP

2024-07-04 19:54| 来源: 网络整理| 查看: 265

题目传送门(洛谷)

先看题目 题目描述

小 Y 的桌子上放着 n n n 个苹果从左到右排成一列,编号为从 1 1 1 到 n n n。

小苞是小 Y 的好朋友,每天她都会从中拿走一些苹果。

每天在拿的时候,小苞都是从左侧第 1 1 1 个苹果开始、每隔 2 2 2 个苹果拿走 1 1 1 个苹果。随后小苞会将剩下的苹果按原先的顺序重新排成一列。

小苞想知道,多少天能拿完所有的苹果,而编号为 n n n 的苹果是在第几天被拿走的?

输入格式

输入的第一行包含一个正整数 n n n,表示苹果的总数。

输出格式

输出一行包含两个正整数,两个整数之间由一个空格隔开,分别表示小苞拿走所有苹果所需的天数以及拿走编号为 n n n 的苹果是在第几天。

样例 #1 样例输入 #1 8 样例输出 #1 5 5 提示

【样例 1 1 1 解释】

小苞的桌上一共放了 8 8 8 个苹果。 小苞第一天拿走了编号为 1 1 1、 4 4 4、 7 7 7 的苹果。 小苞第二天拿走了编号为 2 2 2、 6 6 6 的苹果。 小苞第三天拿走了编号为 3 3 3 的苹果。 小苞第四天拿走了编号为 5 5 5 的苹果。 小苞第五天拿走了编号为 8 8 8 的苹果。

【样例 2 2 2】

见选手目录下的 apple/apple2.in 与 apple/apple2.ans。

【数据范围】

对于所有测试数据有: 1 ≤ n ≤ 1 0 9 1\leq n\leq 10^9 1≤n≤109。

测试点 n ≤ n\leq n≤特殊性质 1 ∼ 2 1\sim 2 1∼2 10 10 10无 3 ∼ 5 3\sim 5 3∼5 1 0 3 10^3 103无 6 ∼ 7 6\sim 7 6∼7 1 0 6 10^6 106有 8 ∼ 9 8\sim 9 8∼9 1 0 6 10^6 106无 10 10 10 1 0 9 10^9 109无

特殊性质:小苞第一天就取走编号为 n n n 的苹果。

思路

题目中 n n n 的数据范围太大,开数组即使用 new ⁡ \operatorname{new} new 也会 MLE ⁡ \operatorname{MLE} MLE,因此我们不需要数组,只模拟苹果的数量(暂时定义为 n u m num num)即可。

有的碰友要问了:题目也有一问让我们输出编号为 n n n 的苹果是在第几天被拿走的,你这样不行啊!

我都已经 AC ⁡ \operatorname{AC} AC 了,我也这么善良,怎么会故意抛给你们错误答案呢?请看下文。

通过找规律可以发现,每天小苞都会拿走 ⌈ n u m 3 ⌉ \lceil \cfrac{num}{3} \rceil ⌈3num​⌉ 个苹果(每个被拿走的苹果编号 m o d    3 \mod 3 mod3 都等于 1 1 1),也就是说,每天苹果数量 n u m num num 都会减少 ⌈ n u m 3 ⌉ \lceil \cfrac{num}{3} \rceil ⌈3num​⌉。

如果 n u m = 0 num = 0 num=0,说明苹果已经被拿完了,输出答案后结束程序。

还有一点需要说明的,在模拟过程中还要时刻注意 n u m m o d    3 num \mod 3 nummod3 是否等于 1 1 1,如果是,说明编号是 n n n 的苹果被拿走了,用一个变量记录上(当然啦,还需要判断一下这个变量是否已经被标记过,你总不能刚拿走一遍又拿走一遍吧)。

递归的参数 d a y day day 表示现在是第几天。

接下来的代码中,我会直接修改输入的变量 n n n,不再定义新的变量 n u m num num。

AC Code #include using namespace std; int n,ans2; void f(int day) { if(!ans2 && n % 3 == 1) ans2 = day + 1; //编号为n的苹果被拿走了 if(n == 0) //苹果被拿光,输出答案 { cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3