过了样例却错第一个点
查看原帖
过了样例却错第一个点
151976
流浪的陈尖刀楼主2020/8/3 23:05

我自己测时过了样例,但机测居然连第一个点都没过

代码如下:

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

求大佬帮帮忙

2020/8/3 23:05
加载中...