CF1950B Upscaling題解

All_Unluck_Beginning發表於2024-04-06

CF1950B Upscaling題解

題意

給予你一個正整數 \(n\),構造一個如圖的字元矩陣。
如圖

思路

注意資料 \(1\le n \le 20\),可以發現資料很小,於是我們可以暴力模擬。

我們可以將兩列看為一列,兩行看為一行。

然而我們可以發現縮成的一行的 \(i\) 等於被縮的兩行的 \({i\div2}\) 的向上取整。

而縮成的一行的 \(i\) 如果是奇數,則證明被縮的兩行在一二或五六行。

列與行是類似的。

縮成的一列的 \(i\) 等於被縮的兩列的 \({i\div2}\) 的向上取整。

而縮成的一列的 \(i\) 如果是奇數,則證明被縮的兩列在一二或五六列。

再根據它的行和列判斷它是井號還是點。

程式碼

#include<bits/stdc++.h>
using namespace std;
int t,n;
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=1;i<=2*n;i++){
			for(int j=1;j<=2*n;j++){
				if(int(ceil(1.0*i/2))%2==1){//12,56行 
					if(int(ceil(j*1.0/2))%2==1){//12,56列 
						cout<<"#";
					}else{//34,78列 
						cout<<".";
					}
				}else{//34,78行 
					if((int)(ceil(j*1.0/2))%2==1){//12,56列 
						cout<<".";
					}else{//34,78列 
						cout<<"#";
					}
				}
			}
			cout<<"\n";
		}
	}
	return 0;
}