QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#642539 | #3040. Container | Augenstern | WA | 1ms | 3796kb | C++14 | 2.6kb | 2024-10-15 14:51:24 | 2024-10-15 14:51:25 |
Judging History
answer
//#pragma GCC optimize(3)
//#pragma GCC optimize("Ofast,unroll-loops")
#include<bits/stdc++.h>
#define int long long
//#define ull unsigned long long
#define lll __int128
//#define double long double
using namespace std;
const long long INF=1e16+5;
//const long long mod=998244353,orm=3;
const long long mod=1000000007;
const int MAXN=10005;
const double eps=1e-6;
bool ST;
vector<int> v1,v2,v3,v4;
vector<pair<int,int> > ans;
int sub,n,C,V,N,N1,N2;
int a[MAXN],b[MAXN],to[MAXN],val[MAXN],vst[MAXN];
int f[1005][1005],sum[1005][1005],pre[1005][1005];
int dst(int x,int y) {
int val=abs(y-x)/2*(C+4)+abs(y-x)%2*(C+3);
return val;
}
void print(int x) {
if(vst[x]) return ;
vst[x]=1;
int l=x,r=to[x];
if(l<r) {
for(int i:v1) {
if(l<i&&i<=r) print(i);
}
for(int i=l;i+1<=r;i+=2) {
ans.push_back({i,min(i+2,r)});
}
}
else {
swap(l,r);
for(int i:v1) {
if(l<=i&&i<r) print(i);
}
for(int i=r;i-1>=l;i-=2) {
ans.push_back({max(i-2,l),i});
}
}
}
void dfs(int i,int j) {
if(i==0) return ;
int y=pre[i][j];
if(y==j) to[v1[i]]=v4.back(),v4.pop_back();
else to[v1[i]]=v3.back(),v3.pop_back();
dfs(i-1,y);
}
void solve() {
string s;cin>>sub>>n>>C>>s;
v1.push_back(-1),v2.push_back(-1),v3.push_back(-1),v4.push_back(-1);
for(int i=1;i<=n;i++) {
if(s[i-1]=='B') a[i]=1,v1.push_back(i);
else a[i]=0;
}
cin>>s;
for(int i=1;i<=n;i++) {
if(s[i-1]=='B') {
b[i]=1,v2.push_back(i);
if(i&1) v3.push_back(i);
else v4.push_back(i);
}
else b[i]=0;
}
N=v1.size()-1;
if(N==0) return cout<<"0\n",void();
for(int i=0;i<=N;i++) {
for(int j=0;j<=N;j++) f[i][j]=INF;
}
N1=v3.size()-1,N2=v4.size()-1;
for(int i=1;i<=n;i++) {
if(i&1) {
for(int j=1;j<=N2;j++) sum[i][j]=sum[i][j-1]+(v4[j]>i);
}
else {
for(int j=1;j<=N1;j++) sum[i][j]=sum[i][j-1]+(v3[j]>i);
}
}
f[0][0]=0;
for(int i=1;i<=N;i++) {
for(int j=0;j<=min(i,N1);j++) {
if(i-j>N2) continue;
int k=i-j,del=sum[v3[j]][k];
if(j) {
if(f[i][j]>f[i-1][j-1]+dst(v1[i],v3[j])+del) f[i][j]=f[i-1][j-1]+dst(v1[i],v3[j])+del,pre[i][j]=j-1;
}
if(k) {
del=sum[v4[k]][j];
if(f[i][j]>f[i-1][j]+dst(v1[i],v4[k])+del) f[i][j]=min(f[i][j],f[i-1][j]+dst(v1[i],v4[k])+del),pre[i][j]=j;
}
}
}
// cout<<f[N][N1];
dfs(N,N1);
for(int i=1;i<=N;i++) print(v1[i]);
cout<<ans.size()<<"\n";
for(auto p:ans) cout<<p.first<<" "<<p.second<<"\n";
}
bool ED;
signed main() {
// cout<<(&ST-&ED)/1024.0/1024.0;
// freopen("machine.in","r",stdin);
// freopen("machine.out","w",stdout);
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
solve();
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 3796kb
input:
5 2 11221 21112
output:
0
result:
wrong answer invalid plan.