YbtOJ上没过,这里AC,有无来Hack
查看原帖
YbtOJ上没过,这里AC,有无来Hack
89644
Harry_hcx楼主2021/7/12 14:50
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,a[16],b[16],rec[3999][16];
bool ok;
bool check(int k){
//	for (int i=1;i<=rec[k][0];i++)
//		cout<<rec[k][i]<<' ';
//	cout<<endl;
	bool flag=true;
	for (int i=1;i<=m;i++)
		if (rec[k][i]!=b[i]){
			flag=false;
			break;
		}
	bool flag2=true;
	for (int i=1;i<=m;i++)
		if (rec[k][i]!=b[m-i+1]){
			flag2=false;
			break;
		}
	return flag||flag2;
}
void search(int k){
//	cout<<k<<endl;
	if (rec[k][0]<m) return; 
	for (int i=1;i<=rec[k][0]-1;i++){
		for (int j=i+1;j<=rec[k][0];j++)
			rec[k+1][++rec[k+1][0]]=rec[k][j];
		rec[k+1][0]=max(i,rec[k][0]-i);
		for (int j=1;j<=i;j++)
			rec[k+1][i-j+1]+=rec[k][j];
		if (rec[k+1][0]==m&&check(k+1)) {
			ok=true;return;
		}
		else if (k<n) search(k+1);
		if (ok) return;	
		memset(rec[k+1],0,sizeof(rec[k+1]));
	}
	rec[k][0]=0;
}
int main(){
	while(cin>>n){
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(rec,0,sizeof(rec));
		ok=false;
		for (int i=1;i<=n;i++)
			cin>>a[i];
		cin>>m;
		for (int i=1;i<=m;i++)
			cin>>b[i];
		rec[1][0]=n;
		memcpy(rec[1]+1,a+1,sizeof(a));
		if (n==m&&check(1)) ok=true;
		search(1);
		if (ok) cout<<"S\n";
		else cout<<"N\n";
	}
	return 0;
}

求hack

2021/7/12 14:50
加载中...