我自己测时过了样例,但机测居然连第一个点都没过
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,s;
char a[1026];
int mi(int,int);
int dp(int k);
int main(){
cin>>n;
getchar();
s=mi(2,n);
gets(a);
dp(1);
return 0;
}
int mi(int a,int b){
int ans=1;
while(b){
if(b%2) ans=ans*a;
a=a*a;
b/=2;
}
return ans;
}
int dp(int k){
if(k>=s){
if(a[k-s]=='1'){
cout<<"I";
return 1;
}
else{
cout<<"B";
return 0;
}
}
else{
int m,n;
m=dp(k*2);
n=dp(k*2+1);
if(m==1&&n==1){
cout<<"I";
return 1;
}
else if(!m&&!n){
cout<<"B";
return 0;
}
else{
cout<<"F";
return 2;
}
}
}
我看到有人说是getchar()的原因
但改成这样一样错
#include<bits/stdc++.h>
using namespace std;
int n,s;
char a[1026];
int mi(int,int);
int dp(int k);
int main(){
cin>>n;
s=mi(2,n);
gets(a);
dp(1);
return 0;
}
int mi(int a,int b){
int ans=1;
while(b){
if(b%2) ans=ans*a;
a=a*a;
b/=2;
}
return ans;
}
int dp(int k){
if(k>=s){
if(a[k-s]=='1'){
cout<<"I";
return 1;
}
else{
cout<<"B";
return 0;
}
}
else{
int m,n;
m=dp(k*2);
n=dp(k*2+1);
if(m==1&&n==1){
cout<<"I";
return 1;
}
else if(!m&&!n){
cout<<"B";
return 0;
}
else{
cout<<"F";
return 2;
}
}
}
求大佬帮帮忙