QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#792428#3040. ContainerCorydoRE 0ms0kbC++142.8kb2024-11-29 10:08:512024-11-29 10:08:52

Judging History

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

  • [2024-11-29 10:08:52]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [2024-11-29 10:08:51]
  • 提交

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;
    cin >> n >> c;
    for(int i=1;i<=n;++i){
        char c;cin >> c;
        if(c=='2') p[++m]=i,exi[i]=1;
    }
    for(int i=1;i<=n;++i){
        char c;cin >> c;
        if(c=='2'){
            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();
    system("pasue");
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Dangerous Syscalls

input:

5 2
11221
21112

output:

2
4 5
3 1

result: