不滚动就是对的,滚了之后就错了
查看原帖
不滚动就是对的,滚了之后就错了
1336385
NoSignal_CN楼主2024/10/14 14:38

滚动前7AC+3WA

#include <bits/stdc++.h>
//#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define size(s) ((int)s.size())
#define pf(x) push_front(x)
#define endl "\n"
using namespace std;
int inline solve();
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
    #endif
    int t=1;//cin >> t;
    while(t--) solve();
    return 0;
}
/*----------------------------------------------------------------------------------------------------solution----------------------------------------------------------------------------------------------------*/
const int N=510,mod=1024523;
int n,m,dp[N][N][N],ans;
string s,t;
void inline update(int& res,int val){
    res=((res%mod+val%mod)%mod+mod)%mod;
}
int inline solve(){
    cin >> n >> m >> s >> t;
    dp[0][0][0]=1;
    for(int i=0;i<=n;i++){
        for(int j=0;j<=m;j++){
            for(int k=0;k<=i+j && k<=n;k++){
                int l=i+j-k;
                if(l>m) continue;
                if(i<n && k<n && s[i]==s[k]) update(dp[i+1][j][k+1],dp[i][j][k]);
                if(j<m && k<n && t[j]==s[k]) update(dp[i][j+1][k+1],dp[i][j][k]);
                if(i<n && l<m && s[i]==t[l]) update(dp[i+1][j][k],dp[i][j][k]);
                if(j<m && l<m && t[j]==t[l]) update(dp[i][j+1][k],dp[i][j][k]);          
            }
        }
    }
    cout << dp[n][m][n] << endl;
    return 0;
}

滚动后:10WA

#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define size(s) ((int)s.size())
#define pf(x) push_front(x)
#define endl "\n"
using namespace std;
int inline solve();
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int t=1;//cin >> t;
    while(t--) solve();
    return 0;
}
/*----------------------------------------------------------------------------------------------------solution----------------------------------------------------------------------------------------------------*/
const int N=510,mod=1024523;
int n,m,dp[2][N][N],ans,idx;
string s,t;
void inline update(int& res,int val){
    res=((res%mod+val%mod)%mod+mod)%mod;
}
int inline solve(){
    cin >> n >> m >> s >> t;
    dp[idx][0][0]=1;
    for(int i=0;i<=n;i++){
        for(int j=0;j<=m;j++){
            for(int k=0;k<=i+j && k<=n;k++){
                int l=i+j-k;
                if(l>m) continue;
                if(i<n && k<n && s[i]==s[k]) update(dp[idx^1][j][k+1],dp[idx][j][k]);
                if(j<m && k<n && t[j]==s[k]) update(dp[idx][j+1][k+1],dp[idx][j][k]);
                if(i<n && l<m && s[i]==t[l]) update(dp[idx^1][j][k],dp[idx][j][k]);
                if(j<m && l<m && t[j]==t[l]) update(dp[idx][j+1][k],dp[idx][j][k]);          
            }
        }
		memset(dp[idx],0,sizeof(dp[idx]));
		idx^=1;
    }
    cout << dp[idx][m][n] << endl;
    return 0;
}
2024/10/14 14:38
加载中...