社区讨论

为什么有两个点错!???!

P1019[NOIP 2000 提高组] 单词接龙(疑似错题)参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi4f18jq
此快照首次捕获于
2025/11/18 18:13
4 个月前
此快照最后确认于
2025/11/18 18:13
4 个月前
查看原帖
CPP
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int N=50,M=10001;
char s[N][M];
char ch;
int flag[N]={0};
int n;
int _sum=0;
int ans=0;
int f=0;
bool check(int x,int y){
int i,j;
int lx=strlen(s[x]);
int ly=strlen(s[y]);
  f=0;
  i=0;
  j=0;
  for(int k=1;k<min(lx,ly);k++){
    int f1=1;
    for(i=lx-k,j=0;i<lx,j<k;i++,j++){
      if(s[x][i]!=s[y][j]){
        f1=0;
        break;
      }
    }
    if(f1==1){
      f=k;
    }
  }
  if(f==0) return false;
  if((f==lx&&lx<ly)||(f==ly&&ly<lx)) return false;
  _sum=ly-f;
  return true;
}
void DFS(int t,int k,int sum){
    if(sum>ans){
      ans=sum;
    }
  for(int i=1;i<=n;i++){
    if(flag[i]<2&&check(k,i)){
      flag[i]++;
      DFS(t+1,i,sum+_sum);
      flag[i]--;
    }
  }
  return;
}
int main(){
  int i;
  scanf("%d",&n);
  for(i=1;i<=n;i++){
    scanf("%s\n",s[i]);
  }
  scanf("%c",&ch);
  for(i=1;i<=n;i++)
    if(s[i][0]==ch){
      flag[i]++;
      DFS(0,i,strlen(s[i])); 
      flag[i]--;
    }
    printf("%d",ans); 
//while(1);
return 0;
}
/* 3 cheat touch at a
*/

回复

1 条回复,欢迎继续交流。

正在加载回复...