QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#643662 | #3040. Container | ucup-team4770 | WA | 3ms | 13648kb | C++14 | 2.6kb | 2024-10-15 22:44:51 | 2024-10-15 22:44:56 |
Judging History
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.