WA0 求调
查看原帖
WA0 求调
1007096
Handezheng楼主2024/8/27 16:08

在此奉上代码

#include<bits/stdc++.h>
#define int long long
#define F(i,l,r) for(int i = l;i <= r;i ++)
using namespace std;
const int N = 1e6 + 50,M = 1e3 + 50;
const int INT = 0x7fffffff,mod = 1024523;

int n,m;
string a,b;
int f[3][505][505];
//f[k][i][j] 
//取到k个球,第一个人在管道1内取到i个球,第二个人在管道1内取到j个球的情况 

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	
	cin >> n >> m >> a >> b;
	f[0][0][0] = 1;
	for(int k = 1;k <= n + m;k ++){
		int now = k & 1,bef = !now;
//		cout << now << ' ' << bef << '\n';
		for(int i = 1;i <= n;i ++)
			for(int j = 1;j <= n;j ++) f[now][i][j] = 0;
		
		int maxx = min(n,k),minx = max(0ll,k - m);
		for(int i = minx;i <= maxx;i ++){
			for(int j = minx;j <= maxx;j ++){
				if(i && j && a[i-1] == a[j-1]){
					f[now][i][j] = (f[now][i][j] + f[bef][i-1][j-1]) % mod;
				}if(i && k-j && a[i-1] == b[k-j-1]){
					f[now][i][j] = (f[now][i][j] + f[bef][i-1][j]) % mod;
				}if(k-i && j && b[k-i-1] == a[j-1]){
					f[now][i][j] = (f[now][i][j] + f[bef][i][j-1]) % mod;
				}if(k-i && k-j && b[k-i-1] == b[k-j-1]){
					f[now][i][j] = (f[now][i][j] + f[bef][i][j]) % mod;
				}
//				cout << f[now][i][j] << ' ';
			}
//			cout << '\n';
		}
//		cout << '\n';
	}
	cout << f[(n+m) & 1][n][n];
	
	return 0;
}

马蜂有点冗余,不过我觉得比较容易看懂

在此奉上错误样例

INPUT

2 3
AB
ABA

OUTPUT

28

2024/8/27 16:08
加载中...