6 条题解

  • 5
    @ 2023-10-24 19:32:42

    一篇VERY多余的题解

    画草图后(图略),可得如下表格:(注意不要把分割区域的数量数错,否则你会像我一样感到迷茫的。。)

    表格中,a 数组用于存储 当平面内有 n 条直线,且其中 m 条(原题目为 q 条,代码是我上课写的,懒得修改了)直线相交于同一点,则这 n 条直线最多能将平面分割成不同区域的数量; n 对应表格的列,表示 平面内直线的数量为 n 条; m 对应表格的行,表示 n 条直线中有 m 条直线相交于同一点

    a[n][m] 1 2 3 4 5 6 ...
    1 2 / / / / / ...
    2 3 4
    3 4 7 6
    4 5 11 10 8
    5 6 16 15 13 10
    6 7 22 21 19 16 12
    ... ...

    观察表格,得出以下结论:

    • m=1:a[n][m] = n+1;
    • m=n:a[n][m] = n*2;
    • 1<m<n:a[n][m] = a[n-1][1]+a[n-1][m];

    进行整理,编写代码:

    #include<cstdio>
    using namespace std;
    
    int main(){
        int n, m;
        scanf("%d%d", &n, &m);
    
        int const cn=n+1;
        int a[cn][cn]={};
    
        for(int i=1; i<=n; i++){
            a[i][1] = i+1;
            a[i][i] = i*2;
            for(int j=2; j<i; j++){
                a[i][j] = a[i-1][1]+a[i-1][j];
            }
        }
    
        printf("%d\n", a[n][m]);
    
        return 0;
    }
    

    信息

    ID
    404
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    85
    已通过
    40
    上传者