为什么本地过了,交上去0分
查看原帖
为什么本地过了,交上去0分
669329
deyi楼主2024/5/8 10:55
#include<bits/stdc++.h>
typedef long long ll;typedef std::string str;
#define reg register
#define ri reg int
#define il inline
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define abs(a) (a<0?-(a):a)
#define fo(a,b) for(ri b(0);b<a;++b)
#define fo_(a,b) for(ri b(1);b<=a;++b)
#define isdigit(c) (c>='0'&&c<='9')
#define isalpha(c) ((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
#define isplace(c) (c==' '||c=='\n'||c=='\r'||c==-1)
#define rd In::read()
#define gc (In::p1==In::p2&&(In::p2=(In::p1=In::buf)+fread(In::buf,1,2097152,stdin),In::p1==In::p2)?-1:*In::p1++)
#define flush() fwrite(Out::buf,1,Out::p1+1,stdout),Out::p1=-1
#define pc(x) Out::buf[++Out::p1]=x
#define wt Out::write
namespace In{char *buf=new char[2097153],*p1=buf,*p2=buf;il ll read(){reg char c=gc;reg ll num=0;reg bool f=0;while(!isdigit(c)){f=(c=='-'?1:f),c=gc;}while(isdigit(c)){num=num*10+c-'0',c=gc;}return (f?-(num):num);}il char readc(){reg char c=gc;while(!isplace(c)){c=gc;}return c;}il str reads(){str s;reg char c=gc;while(!isplace(c)){s+=c,c=gc;}return s;}}
namespace Out{char *buf=new char[2097153];int p1=-1;il void write(ll x){if(x<0){pc('-'),x=-x;}reg ll y=10,l=1;while(y<=x){y*=10,l++;}while(l--){y/=10,pc(x/y+48),x%=y;}}il void writec(char* c){for(ri i(0);c[i];++i){pc(c[i]);}}il void writec(str s){for(reg char i:s){pc(i);}}}
int n=rd,sum=INT_MIN;
std::map<str,int> mp;
int f(str a,str b){
	if(a==""){
		return 0;
	}
	fo_(min(a.size(),b.size()),i){
		if(a.substr(a.size()-i,i)==b.substr(0,i)){
			return i;
		}
	}
	return -1;
}
void dfs(str s){
	sum=max(sum,(int)s.size());
	for(auto i:mp){
		if(i.second and f(s,i.first)!=-1){
			mp[i.first]--;
			dfs(s+i.first.substr(f(s,i.first),i.first.size()-f(s,i.first)));
			mp[i.first]++;
		}
	}
}
signed main(signed argc,char *argv[]){
	fo(n,i){
		mp[In::reads()]=2;
	}
	dfs(In::reads());
	wt(sum),pc('\n');
	flush();
}
2024/5/8 10:55
加载中...