不大理解也
查看原帖
不大理解也
385716
FlameWielder_Z楼主2022/5/4 17:01
#include<cstdio>
#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
int n;
int mi[105],l,len,ans[105];
char m[105];
struct node{
	char s[25];
	int num[25];
	int len,id;
}w[105];
void trans(node a[105],int k,int l){
	for(int i=1;i<=l;i++){
		char c=a[k].s[i];
		int t;
		if(c=='a'||c=='b'||c=='c')t=1;
		if(c=='d'||c=='e'||c=='f')t=2;
		if(c=='g'||c=='h'||c=='i')t=3;
		if(c=='j'||c=='k'||c=='l')t=4;
		if(c=='m'||c=='n')t=5;
		if(c=='o'||c=='p'||c=='q')t=6;
		if(c=='r'||c=='s'||c=='t')t=7;
		if(c=='u'||c=='v'||c=='w')t=8;
		if(c=='x'||c=='y'||c=='z')t=9;
		a[k].num[i]=t;
	}
}
void dfs(int k){
	if(k>=l){
		for(int i=1;i<=len;i++){
			printf("%s",w[ans[i]].s+1);
			if(i!=len)printf(" ");
		}
//		printf("\n");
//		for(int i=1;i<=len;i++){
//			printf("%d ",ans[i]);
//		}
		exit(0);
	}
	for(int i=1;i<=n;i++){
		int flag=1;
		for(int j=1;j<=w[i].len;j++){
			if(mi[k+j]!=w[i].num[j]){
				flag=0;
				break;
			}
		}
		if(flag){
			ans[++len]=i;
//			if(i==5)printf("check");
			dfs(k+w[i].len);
  			//--len			看这里!!
			ans[--len]=0;//看这里!!
		}
	}
}
int main(){
	scanf("%d",&n);
	scanf("%s",m+1);
	l=strlen(m+1);
	for(int i=1;i<=l;i++){
		mi[i]=m[i]-'0';
	}
	for(int i=1;i<=n;i++){
		scanf("%s",w[i].s+1);
		w[i].len=strlen(w[i].s+1);
		w[i].id=i;
		trans(w,w[i].id,w[i].len);
	}
	dfs(0);
	printf("No Solutions!");
	return 0;
}

问题出在第56行:

ans[--len]=0;

这样写只有80pts

但是如果改成--lenAC

我觉得都没问题,因为++len的时候会把原来的盖掉。

有哪位大佬能解释一下吗?

2022/5/4 17:01
加载中...