QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#670009 | #3040. Container | Nephren_Sakura | WA | 3ms | 35176kb | C++14 | 1.9kb | 2024-10-23 20:14:34 | 2024-10-23 20:14:35 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
int sub,n,c,sum[1000005][2],dp[1005][1005],pre[1005][1005],a[1000005],in[1000005];
string s,t;
vector<int> id,ID[2],v[1000005];
queue<int> q;
vector<pair<int,int> > ans;
int help(int x){return (x+1)/2*c+(x/2)*4+(x%2)*3;}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>c>>s>>t;
s=" "+s,t=" "+t;
for(int i=1; i<=n; i++){
sum[i][0]+=sum[i-1][0],sum[i][1]+=sum[i-1][1];
if(s[i]=='2') id.push_back(i);
if(t[i]=='2') ID[i%2].push_back(i),sum[i][i%2]++;
}
for(int i=0; i<=id.size(); i++)
for(int j=0; j<=id.size(); j++)
dp[i][j]=(int)1e18;
dp[0][0]=0;
for(int i=0; i<id.size(); i++)
for(int j=0; j<=i; j++){
if(dp[i][j]!=(int)1e18){
if(j<ID[0].size()){
int x=abs(ID[0][j]-id[i]),val=dp[i][j]+help(x)+max(0ll,sum[ID[0][j]][1]+j-i);
if(dp[i+1][j+1]>val) dp[i+1][j+1]=val,pre[i+1][j+1]=0;
}
if(i-j<ID[1].size()){
int x=abs(ID[1][i-j]-id[i]),val=dp[i][j]+help(x)+max(0ll,sum[ID[1][i-j]][0]-j);
if(dp[i+1][j]>val) dp[i+1][j]=val,pre[i+1][j]=1;
}
}
}
int i=id.size(),j=ID[0].size();
while(i){
if(pre[i][j]) i--,a[i]=ID[1][i-j];
else i--,j--,a[i]=ID[0][j];
}
for(int i=0; i<id.size(); i++) for(int j=i+1; j<id.size(); j++)
if(a[i]<a[j]){
if(id[i]<a[i]) v[j].push_back(i),in[i]++;
else v[i].push_back(j),in[j]++;
}
for(int i=0; i<id.size(); i++) if(!in[i]) q.push(i);
while(!q.empty()){
int cur=q.front();
q.pop();
int x=id[cur],y=a[cur];
while(x+2<=y) ans.push_back(make_pair(x,x+2)),x+=2;
while(x-2>=y) ans.push_back(make_pair(x-2,x)),x-=2;
while(x<y) ans.push_back(make_pair(x,x+1)),x++;
while(x>y) ans.push_back(make_pair(x-1,x)),x--;
for(int nxt:v[cur]){
in[nxt]--;
if(!in[nxt]) q.push(nxt);
}
}
cout<<ans.size()<<'\n';
sort(ans.begin(),ans.end());
for(pair<int,int> p:ans) cout<<p.first<<' '<<p.second<<'\n';
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 34528kb
input:
5 2 11221 21112
output:
2 1 3 4 5
result:
ok good job!
Test #2:
score: -100
Wrong Answer
time: 3ms
memory: 35176kb
input:
7 0 2212121 1212122
output:
4 1 2 2 4 4 6 6 7
result:
wrong answer invalid plan.