QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#643662#3040. Containerucup-team4770WA 3ms13648kbC++142.6kb2024-10-15 22:44:512024-10-15 22:44:56

Judging History

你现在查看的是最新测评结果

  • [2024-10-15 22:44:56]
  • 评测
  • 测评结果:WA
  • 用时:3ms
  • 内存:13648kb
  • [2024-10-15 22:44:51]
  • 提交

answer

//Date: 2024-10-15 14:03:28
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int rd() {
    int s=0,m=0;char ch=getchar();
    while(!isdigit(ch)) {if(ch=='-')m=1;ch=getchar();}
    while( isdigit(ch)) s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
    return m?-s:s;
}
bool MBE;
namespace SOLVER {
int id,n,cost,f[1005][1005],v[2][1005][1005],ansi;char s[1005],t[1005];
vector<int> a,b[2];vector<pair<int,int>> ans,anss;
void getans(int i,int j) {
    if(i==0) return;
    if(j!=0) {
        int S=a[i-1],T=b[0][j-1],ret=abs(S-T)/2*(cost+4)+(S%2!=T%2)*(cost+3)+v[0][j][i-j];
        if(f[i][j]==f[i-1][j-1]+ret) {ans.emplace_back(S,T),getans(i-1,j-1);return;}
    }
    if(j!=i) {
        int S=a[i-1],T=b[1][i-j-1],ret=abs(S-T)/2*(cost+4)+(S%2!=T%2)*(cost+3)+v[1][i-j][j];
        if(f[i][j]==f[i-1][j]+ret) {ans.emplace_back(S,T),getans(i-1,j);return;}
    }
}
void MAIN() {
    scanf("%lld%lld%lld%s%s",&id,&n,&cost,s+1,t+1);
    for(int i=1;i<=n;i++) if(s[i]=='B') a.emplace_back(i);
    for(int i=1;i<=n;i++) if(t[i]=='B') b[i%2].emplace_back(i);
    for(int i=1;i<=b[0].size();i++) for(int j=1;j<=b[1].size();j++) 
        v[0][i][j]=v[0][i][j-1]+(b[0][i-1]<b[1][j-1]);
    for(int i=1;i<=b[1].size();i++) for(int j=1;j<=b[0].size();j++) 
        v[1][i][j]=v[1][i][j-1]+(b[1][i-1]<b[0][j-1]);
    memset(f,0x3f,sizeof(f));f[0][0]=0;
    for(int i=1;i<=a.size();i++) for(int j=0;j<=i;j++) if(j<=b[0].size()&&i-j<=b[1].size()) {
        if(j!=0) {
            int S=a[i-1],T=b[0][j-1],ret=abs(S-T)/2*(cost+4)+(S%2!=T%2)*(cost+3)+v[0][j][i-j];
            f[i][j]=min(f[i][j],f[i-1][j-1]+ret);
        }
        if(j!=i) {
            int S=a[i-1],T=b[1][i-j-1],ret=abs(S-T)/2*(cost+4)+(S%2!=T%2)*(cost+3)+v[1][i-j][j];
            f[i][j]=min(f[i][j],f[i-1][j]+ret);
        }
    }
    for(int i=1;i<=a.size();i++) if(f[a.size()][i]<f[a.size()][ansi]) ansi=i;
    getans(a.size(),ansi);sort(ans.begin(),ans.end());
    // for(auto [S,T]:ans) cout<<S<<" "<<T<<endl;
    for(auto [S,T]:ans) if(S>T) {
        for(int i=S;i-2>=T;i-=2) anss.emplace_back(i-2,i);
        if(S%2!=T%2) anss.emplace_back(T,T+1);
    } 
    reverse(ans.begin(),ans.end());
    for(auto [S,T]:ans) if(S<T) {
        for(int i=S;i+2<=T;i+=2) anss.emplace_back(i,i+2);
        if(S%2!=T%2) anss.emplace_back(T-1,T);
    } 
    cout<<anss.size()<<endl;
    for(auto [l,r]:anss) printf("%lld %lld\n",l,r);
}
}
bool MED;
signed main() {
    // freopen("machine3.in","r",stdin);freopen("machine.out","w",stdout);
    for(int tt=1;tt;tt--) SOLVER::MAIN();
    cerr<<(&MBE-&MED)/1024<<" KB, "<<1000*clock()/CLOCKS_PER_SEC<<" ms\n";
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 3ms
memory: 13648kb

input:

5 2
11221
21112

output:

0

result:

wrong answer invalid plan.