题解 | #压缩二维码#
压缩二维码
https://www.nowcoder.com/practice/1150d36c2cd64df9bf373988486c6723
解题思路
将二维码转换为一维码(确信)
就是,将 行字符串依次拼接起来
每四个一组,进行翻译
代码
#include <iostream>
#include <string>
#include <vector>
using namespace std;
const int N=1100;
string a[N];
string s;
vector<int> ans;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,i,j,k,w;
cin>>n;
n=1<<n;
for(i=0;i<n;++i)
cin>>a[i];
for(i=0;i<n;++i)
s+=a[i];
for(i=0;i<n*n;i+=4)
{
w=0;
for(k=0;k<4;++k)
w=w*2+(s[i+k]=='#'?1:0);
ans.emplace_back(w);
}
for(auto &x:ans)
cout<<x<<' ';
return 0;
}
import java.util.*;
public class ZT11 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(),i,j,k,w;
n=1<<n;
StringBuffer s=new StringBuffer();
ArrayList<Integer> ans=new ArrayList<>();
for(i=0;i<n;i++){
String tmp=sc.next();
s.append(tmp);
}
for(i=0;i<n*n;i+=4){
w=0;
for(k=0;k<4;++k)
w=w*2+(s.charAt(i+k)=='#'?1:0);
ans.add(w);
}
for(Integer x:ans)
System.out.print(x+" ");
}
}
n=int(input())
n=1<<n
a=[input() for i in range(0,n)]
s=''.join(a)
ans=[]
for i in range(0,n*n,4):
w=0
for k in range(0,4):
w=w*2+(1 if s[i+k]=='#' else 0)
ans.append(w)
print(*ans)
算法及复杂度
- 算法:枚举。
- 时间复杂度: 。
- 空间复杂度: 。