题解:P12190 [蓝桥杯 2025 省 Java C] 小说

· · 题解

神秘构造。

贪心考虑,为了尽量让章节多,要让 n 个人都知道一遍真相,一个人知道真相之前,要尽量让更多人发现他不知道真相,一个人知道真相之后,要尽量让更多人发现他知道真相。

我们假设现在甲刚刚知道了真相,下一个知道真相的人是乙。那么中间要写的几个章节是让除了甲之外的 (n-1) 个人都知道甲知道了真相,让除了乙之外的 (n-1) 个人都知道乙不知道真相。由于总共有 n 个人,类似的连续情节会发生 (n-1) 次。

特别地,在第一个知道真相的人知道真相之前,发现他不知道真相的人只能有一个,因为此时没有人发现真相,那么没有人会发现某个人知道真相,这样为了情节不重复,只能第二章是一个人发现了真相。同理,最后一个人发现真相之后,也只有一个人能发现最后一个人发现了真相。

这样最终答案就是 2\times(n-1)\times(n-1)+n+2,化简一下就是 2n^2-3n+4。注意当 n=1 时,只能有一个章节,需要特判。

代码就很简单了。

C++ 代码:

#include<iostream>
using namespace std;
int main(){
    long long n;
    cin>>n;
    if(n==1){
        cout<<1;
        return 0;
    }
    cout<<2*n*n-3*n+4;
    return 0;
}

鉴于我之前交蓝桥杯 Python 组的题解因为没有 python 代码被打回了,特意让 deepseek 帮我写了一份 Java 代码(第一遍还编译错误了,害得我专门去研究了一下):

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        long n=scanner.nextInt();
        if(n==1){
            System.out.println(1);
        } 
        else{
            System.out.println(2*n*n-3*n+4);
        }
    }
}