【题解】UVa 11040【Add bricks in the wall】

分析

这里可以构造解法,因为规律很显然就可以看出来。

代码

#include<cstdio>

int main(){
    int T;scanf("%d",&T);
    while(T--){
        int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40,a41,a42,a43,a44,a45;
        scanf("%d",&a1);
        scanf("%d %d",&a4,&a6);
        scanf("%d %d %d",&a11,&a13,&a15);
        scanf("%d %d %d %d",&a22,&a24,&a26,&a28);
        scanf("%d %d %d %d %d",&a37,&a39,&a41,&a43,&a45);

        a38 = (a22 - a37 - a39) >> 1;
        a40 = (a24 - a39 - a41) >> 1;
        a42 = (a26 - a41 - a43) >> 1;
        a44 = (a28 - a43 - a45) >> 1;
        a29 = a37 + a38;
        a30 = a38 + a39;
        a31 = a39 + a40;
        a32 = a40 + a41;
        a33 = a41 + a42;
        a34 = a42 + a43;
        a35 = a43 + a44;
        a36 = a44 + a45;
        a23 = (a11 - a22 - a24) >> 1;
        a25 = (a13 - a24 - a26) >> 1;
        a27 = (a15 - a26 - a28) >> 1;
        a16 = a22 + a23;
        a17 = a23 + a24;
        a18 = a24 + a25;
        a19 = a25 + a26;
        a20 = a26 + a27;
        a21 = a27 + a28;
        a12 = (a4 - a11 - a13) >> 1;
        a14 = (a6 - a13 - a15) >> 1;
        a7 = a11 + a12;
        a8 = a12 + a13;
        a9 = a13 + a14;
        a10 = a14 + a15;
        a5 = (a1 - a4 - a6) >> 1;
        a2 = a4 + a5;
        a3 = a5 + a6;

        printf("%d\n",a1);
        printf("%d %d\n",a2,a3);
        printf("%d %d %d\n",a4,a5,a6);
        printf("%d %d %d %d\n",a7,a8,a9,a10);
        printf("%d %d %d %d %d\n",a11,a12,a13,a14,a15);
        printf("%d %d %d %d %d %d\n",a16,a17,a18,a19,a20,a21);
        printf("%d %d %d %d %d %d %d\n",a22,a23,a24,a25,a26,a27,a28);
        printf("%d %d %d %d %d %d %d %d\n",a29,a30,a31,a32,a33,a34,a35,a36);
        printf("%d %d %d %d %d %d %d %d %d\n",a37,a38,a39,a40,a41,a42,a43,a44,a45);
    }

    return 0;
}