分析
首先,我们先把 a i , 1 a_{i,1} ai,1 上方的灯以及它本身都点亮,那么它此时的亮度为 i i i。而由于 a i , 2 a_{i,2} ai,2 无法被 a i , 1 a_{i,1} ai,1 照到,故它的亮度为 i − 1 i-1 i−1,那么那个缺少的 1 1 1 如何补全呢?我们其实可以把 a i , 2 a_{i,2} ai,2 最上方的那盏灯也就是 a 2 , 2 a_{2,2} a2,2 给点亮,那么此时 a i , 2 a_{i,2} ai,2 的亮度也就为 i i i 了。由于 a i , 3 a_{i,3} ai,3 无法被 a i − 1 , 1 a_{i-1,1} ai−1,1 照到,故它的亮度为 i − 1 i-1 i−1,我们如果此时把 a i , 3 a_{i,3} ai,3 最上方的那盏灯也就是 a 3 , 3 a_{3,3} a3,3 给点亮,此时它的亮度也会变成 i i i。而 a i , 4 a_{i,4} ai,4……由于 a i , i − 1 a_{i,i-1} ai,i−1 无法被 a 3 , 1 a_{3,1} a3,1 照到,故它的亮度为 i − 1 i-1 i−1,我们如果此时把 a i , i − 1 a_{i,i-1} ai,i−1 最上方的那盏灯也就是 a i − 1 , i − 1 a_{i-1,i-1} ai−1,i−1 给点亮,此时它的亮度也会变成 i i i。由于 a i , i a_{i,i} ai,i 无法被 a 2 , 1 a_{2,1} a2,1 照到,故它的亮度为 i − 1 i-1 i−1,我们如果此时把 a i , i a_{i,i} ai,i 它本身给点亮,此时它的亮度也会变成 i i i。
总结:我们只需要把最两边的灯点亮即可
code
#include<iostream>
using namespace std;
int main() {ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n,t;cin>>t;while(t--) {cin>>n;cout<<"1\n";for(int i=1;i<n;++i) {cout<<"1 ";for(int j=1;j<i;++j) cout<<"0 ";cout<<"1\n";}}return 0;
}