原题解链接:https://ac.nowcoder.com/discuss/149980

定理: nn条直线最多能把空间划分为n(n+2)2+1\frac{n *(n+2)}{2}+1

我们可以把XX型看做两条不相交的直线,因此答案为2n(2n+1)2+1\frac{2 n *(2 n+1)}{2}+1

证明:

对于第nn条直线,如果使得区域增加kk个, 当且仅当它与k1k- 1条直线相交 而我们之前已经构造好了n1n - 1条两两相交的直线,且三三不相交的直线,因此第nn条直线一定可以找到一种方法使得与n1n- 1条直线相交

因此ans=1+1+2+3+...+nans= 1+1+2+3+...+n

直接上等差数列求和公式

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define LL long long 
using namespace std;
const int MAXN = 2001 * 2, INF = 1e9 + 10;
inline LL read() {
    char c = getchar(); LL x = 0, f = 1;
    while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int main() {
    long long n = read();
    if(n > (long long) 1e9) {
		puts("GG");
    }
    long long  ans = n * (2 * n + 1) + 1; 
    //printf("%lld\n", ans);
    cout << (long long)ans;
    return 0;
}