题目链接:题目
大意:
判断一串字符是否能构成边上是1,里面是0的方块。
思路:
先判断是不是方的,就看n是不是完全平方数(int sq=(int)sqrt(n);
if(sq*sq!=n)return false),然后分类判断1和0就行。如果是在边上的看是不是1,否则看是不是0。
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MOD 1000000007
int solve(int n,string s){
int sq=(int)sqrt(n);
if(sq*sq!=n)return false;
for(int i=0;i<n;i++){
if(i+1<=sq||i%sq==0||i%sq==sq-1||i/sq==sq-1){
if(s[i]=='0')return false;
}else if(s[i]=='1')return false;
}
return true;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--){
int n;
cin>>n;
string s;
cin>>s;
if(solve(n,s))cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}