1 条题解

  • 0
    @ 2025-8-24 21:15:40

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Max_robot
    这个家伙很懒,什么也没有留下

    搬运于2025-08-24 21:15:39,当前版本为作者最后更新于2025-02-15 13:42:00,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    看到这一题,首先想到的就是用一个数组吧?不过仔细一想,好像不需要。为什么呢?因为 ai=ia_i=i,你不管想输出哪一个数字,你直接输出就行了。因为 ai=ia_i=i,所以输出 ii 就是输出 aia_i

    那就好办了,只需找最中间的数字不就好了?

    我们来举一个例子来推理。

    n=5n=5

    1 2 3 4 5

    不难发现,最中间的数字是三,在观察他的位置,会发现他在 an÷2+1a_{n \div 2+1} 这里,也就是 n÷2+1n \div 2+1。正好等于三,那么我们不仅把开头说到的证明了,而且知道了 nn 中间是 n÷2+1n \div 2+1

    然后我们处理下一个问题,如果 nn 为偶数,中间的两个数是什么呢?依旧是举例子。

    n=4n=4

    1 2 3 4

    我们会发现,中间两个数是 2 和 3。2 是 n÷2n \div 2,3 是 n÷2+1n \div 2+1。那么我们就知道了中间那个数是几,最后加起来就好了。

    看,我们通过举例子成功推断出来了这道题。所以以后做题也可以通过举例子来做。

    #include<bits/stdc++.h>
    using namespace std;
    long long n;
    int main(){
    	cin>>n;
    	if(n%2!=0){
    		cout<<(n+1)/2<<endl;
    	}else if(n%2==0){
    		cout<<n/2+n/2+1<<endl;
    	}
        return 0;
    }
    
    • 1

    信息

    ID
    9148
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者