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;
}