QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#792415 | #3040. Container | Corydo | WA | 0ms | 3628kb | C++14 | 2.8kb | 2024-11-29 10:05:39 | 2024-11-29 10:05:40 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,int> pii;
const ll INF=1e16+10;
const int N=1e3+10;
int read(){
int sym=1,num=0;char cnt=getchar();
while(cnt<'0'||cnt>'9'){
if(cnt=='-') sym=-1;
cnt=getchar();
}
while(cnt>='0'&&cnt<='9'){
num=(num<<3)+(num<<1)+(cnt^48);
cnt=getchar();
}
return sym*num;
}
vector<pii> v;
pii f[N][N];
int n,c,m,m0,m1;
int p[N],p0[N],p1[N],s0[N],s1[N],mh[N],exi[N];
ll c0(int i,int j){
if(j>m0) return INF;
int d=abs(p[i]-p0[j]);
return (d>>1)*(c+4)+(p[i]&1?(c+3):max(0,i-j-s1[p0[j]]));
}
ll c1(int i,int j){
if(j>m1) return INF;
int d=abs(p[i]-p1[j]);
return (d>>1)*(c+4)+(p[i]&1?max(0,i-j-s0[p1[j]]):(c+3));
}
void ins(int l,int r){
v.emplace_back(l,r),swap(exi[l],exi[r]);
}
void mov(int l,int r){
if(l==r) return;
if(abs(l-r)==1) return ins(l,r);
int t=l>r?-2:2;
if(exi[l+t]) mov(l+t,r),ins(l,l+t);
else ins(l,l+t),mov(l+t,r);
}
int main(){
//auto st=chrono::high_resolution_clock::now();
// freopen("machine.in","r",stdin);
// freopen("machine.out","w",stdout);
ios::sync_with_stdio(false);
// cout << "Lyd " << endl;
int x;cin >> x >> n >> c;
for(int i=1;i<=n;++i){
char c;cin >> c;
if(c=='B') p[++m]=i,exi[i]=1;
}
for(int i=1;i<=n;++i){
char c;cin >> c;
if(c=='B'){
if(i&1) p1[++m1]=i;
else p0[++m0]=i;
}
}
if(m0==0) m0=-1;if(m1==0) m1=-1;
for(int i=1;i<=m1;++i) ++s1[p1[i]];
for(int i=1;i<=n;++i) s1[i]+=s1[i-1];
for(int i=1;i<=m0;++i) ++s0[p0[i]];
for(int i=1;i<=n;++i) s0[i]+=s0[i-1];
for(int i=0;i<=m;++i)
for(int j=0;j<=m;++j)
f[i][j]=make_pair(INF,0);
f[0][0]=make_pair(0,0);
// cout << "Wzy" << endl;
for(int i=1;i<=m;++i){
for(int j=0;j<=i-1;++j)
f[i][j+1]=min(f[i][j+1],make_pair(f[i-1][j].first+c1(i,j+1),j)),f[i][j]=min(f[i][j],make_pair(f[i-1][j].first+c0(i,i-j),j));
// for(int j=0;j<=i;++j)
// cout << f[i][j].second << " ";
// cout << endl;
}
int now=m1;
for(int i=m;i>=1;--i){
int lst=f[i][now].second;
if(lst==now) mh[p0[i-now]]=i;
else mh[p1[now]]=i;
now=lst;
}
for(int i=n;i>=1;--i)
if(mh[i]&&p[mh[i]]<i) mov(p[mh[i]],i);
for(int i=1;i<=n;++i)
if(mh[i]&&p[mh[i]]>i) mov(p[mh[i]],i);
cout << v.size() << endl;
for(auto it:v) cout << it.first << " " << it.second << endl;
// auto ed=chrono::high_resolution_clock::now();
// auto cst=chrono::duration_cast<chrono::milliseconds>(ed-st);
// cout << cst.count();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3628kb
input:
5 2 11221 21112
output:
0
result:
wrong answer invalid plan.