请问这题最后一道测试样例是啥呀。。。。好久都过不了,不知道错在哪里
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int a[100005],b[100005],vis[100005];
int flagend=0,flag=0;
string s;
string s1;
void dfs(int v,int n){
if(v<0||v>n){
return;
}
if(v==n){
if(s1.size()==0||s<s1){
s1=s;
flagend=flag;
}
return;
}
if(vis[v]==1){
flag=1;
return;
}
vis[v]=1;
s.push_back('a');
dfs(a[v]+v,n);
s.erase(s.end()-1);
s.push_back('b');
dfs(b[v]+v,n);
s.erase(s.end()-1);
vis[v]=0;
flag=0;
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++){
scanf("%d",&b[i]);
}
dfs(0,n-1);
if(s1.size()==0){
cout<<"No solution!";
}
else{
if(flagend==1){
cout<<"Infinity!";
}
else{
cout<<s1;
}
}
}
#include<string>
#include<cstdio>
using namespace std;
int a[100005],b[100005],vis[100005];
int flagend=0,flag=0;
string s;
string s1;
void dfs(int v,int n){
if(v<0||v>n){
return;
}
if(v==n){
if(s1.size()==0||s<s1){
s1=s;
flagend=flag;
}
return;
}
if(vis[v]==1){
flag=1;
return;
}
vis[v]=1;
s.push_back('a');
dfs(a[v]+v,n);
s.erase(s.end()-1);
s.push_back('b');
dfs(b[v]+v,n);
s.erase(s.end()-1);
vis[v]=0;
flag=0;
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++){
scanf("%d",&b[i]);
}
dfs(0,n-1);
if(s1.size()==0){
cout<<"No solution!";
}
else{
if(flagend==1){
cout<<"Infinity!";
}
else{
cout<<s1;
}
}
}
全部评论
(1) 回帖