QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#642539#3040. ContainerAugensternWA 1ms3796kbC++142.6kb2024-10-15 14:51:242024-10-15 14:51:25

Judging History

This is the latest submission verdict.

  • [2024-10-15 14:51:25]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 3796kb
  • [2024-10-15 14:51:24]
  • Submitted

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.