QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#643202#3040. Containercppcppcpp3RE 0ms0kbC++202.0kb2024-10-15 19:46:532024-10-15 19:46:54

Judging History

This is the latest submission verdict.

  • [2024-10-15 19:46:54]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2024-10-15 19:46:53]
  • Submitted

answer

#include<bits/stdc++.h>
#define FIO(file) freopen(file".in","r",stdin),freopen(file".out","w",stdout)
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
using namespace std;
const int N=1005;
const int inf=1e18;

int n,c0,c1,C;
string a,b;
vector<int> A,B[2]; 

int f[N][N],pr[N][N];
int _a[N],_b[N][2];

vector<pii> vl,vr,as;

void dfs(int x,int y){
	if(!x && !y) return;
	int u=A[x+y-1];
	if(!pr[x][y]){
		int v=B[0][x-1];
		if(u>v) vl.pb({u,v});
		if(u<v) vr.pb({u,v});
		dfs(x-1,y);
	}else{
		int v=B[1][y-1];
		if(u>v) vl.pb({u,v});
		if(u<v) vr.pb({u,v});
		dfs(x,y-1);
	}
}

signed main(){
//	FIO("machine");
	cin.tie(nullptr)->sync_with_stdio(false);
	cin>>n>>C>>a>>b,a=" "+a,b=" "+b;
	for(int i=1;i<=n;++i){
		if(a[i]=='B') A.pb(i),_a[i]=_a[i-1]+1;
		else _a[i]=_a[i-1];
	}
	for(int i=1;i<=n;++i){
		if(b[i]=='R') _b[i][0]=_b[i-1][0],_b[i][1]=_b[i-1][1];
		else if(i&1) B[1].pb(i),_b[i][0]=_b[i-1][0],_b[i][1]=_b[i-1][1]+1;
		else B[0].pb(i),_b[i][0]=_b[i-1][0]+1,_b[i][1]=_b[i-1][1];
 	}
	memset(f,0x7f,sizeof f),f[0][0]=0;
	c0=B[0].size(),c1=B[1].size();
	
	for(int i=0;i<=c0;++i){
		for(int j=0;j<=c1;++j){
			if(i==c0 && j==c1) continue;
			if(f[i][j]>=inf) continue;
			int u=A[i+j];
			if(i<c0){
				int v=B[0][i],d=abs(u-v); 
				int val=(d/2)*(C+4)+(d&1)*(C+3)+max(0ll,_b[v][1]-j);
				if(f[i+1][j]>f[i][j]+val) f[i+1][j]=f[i][j]+val,pr[i+1][j]=0;
			}
			if(j<c1){
				int v=B[1][j],d=abs(u-v);
				int val=(d/2)*(C+4)+(d&1)*(C+3)+max(0ll,_b[v][0]-i);
				if(f[i][j+1]>f[i][j]+val) f[i][j+1]=f[i][j]+val,pr[i][j+1]=1;
			}
		}
	}
	
	dfs(c0,c1),reverse(vl.begin(),vl.end());
	for(auto h:vl){
		int u=h.fi,v=h.se;
		while(u-v>1) as.pb({u-2,u}),u-=2;
		if(u^v) as.pb({v,u}),u=v;
	}
	for(auto h:vr){
		int u=h.fi,v=h.se;
		while(v-u>1) as.pb({u,u+2}),u+=2;
		if(u^v) as.pb({u,v}),u=v;
	}
	cout<<as.size()<<"\n";
	for(auto h:as) cout<<h.fi<<' '<<h.se<<"\n";
	return 0;
}

详细

Test #1:

score: 0
Runtime Error

input:

5 2
11221
21112

output:


result: