QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#718508#8523. Puzzle IIyhdddWA 3ms20360kbC++143.6kb2024-11-06 20:42:302024-11-06 20:42:30

Judging History

This is the latest submission verdict.

  • [2024-11-06 20:42:30]
  • Judged
  • Verdict: WA
  • Time: 3ms
  • Memory: 20360kb
  • [2024-11-06 20:42:30]
  • Submitted

answer

#include<bits/stdc++.h>
#define int long long
#define mod 998244353ll
#define pii pair<int,int>
#define fi first
#define se second
#define mems(x,y) memset(x,y,sizeof(x))
#define pb push_back
#define db double
using namespace std;
const int maxn=300010;
const int inf=1e18;
inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
	return x*f;
}
bool Mbe;

int n,k;
char s[maxn],t[maxn];
mt19937 rnd(time(0));
struct fhq{
	int w[maxn<<1],ls[maxn<<1],rs[maxn<<1],idx,rt;
	int siz[maxn<<1],sz[maxn<<1],num[maxn<<1],val[maxn<<1];
	void up(int u){
		siz[u]=siz[ls[u]]+siz[rs[u]]+sz[u];
		num[u]=num[ls[u]]+num[rs[u]]+val[u];
	}
	int merge(int u,int v){
		if(!u||!v)return u|v;
		if(w[u]<w[v]){
			rs[u]=merge(rs[u],v);
			up(u);
			return u;
		}
		else{
			ls[v]=merge(u,ls[v]);
			up(v);
			return v;
		}
	}
	pii split1(int u,int k){
		if(!u)return {0,0};
		if(siz[ls[u]]+sz[u]>k){
			pii t=split1(ls[u],k);
			ls[u]=t.se;
			up(u);
			return {t.fi,u};
		}
		else{
			pii t=split1(rs[u],k-siz[ls[u]]-sz[u]);
			rs[u]=t.fi;
			up(u);
			return {u,t.se};
		}
	}
	pii split2(int u,int k){
		if(!u)return {0,0};
		if(num[ls[u]]+val[u]>k){
			pii t=split2(ls[u],k);
			ls[u]=t.se;
			up(u);
			return {t.fi,u};
		}
		else{
			pii t=split2(rs[u],k-num[ls[u]]-val[u]);
			rs[u]=t.fi;
			up(u);
			return {u,t.se};
		}
	}
	int newnode(int s,int v){
		w[++idx]=rnd();siz[idx]=sz[idx]=s,val[idx]=num[idx]=v;
		return idx;
	}
}t1,t2;
vector<pii> ans;
void work(){
	n=read();k=read();
	scanf("%s%s",s+1,t+1);
	int num=0;
	for(int i=1;i<=n;i++)num+=s[i]=='B';
	if(num<=n/2){
		for(int i=1;i<=n;i++)s[i]=s[i]=='B'?'C':'B';
		for(int i=1;i<=n;i++)t[i]=t[i]=='B'?'C':'B';
	}
	for(int i=1;i<=n;i++){
		t1.rt=t1.merge(t1.rt,t1.newnode(1,s[i]=='C'));
		t2.rt=t2.merge(t2.rt,t2.newnode(1,t[i]=='B'));
	}
	// cout<<t1.rt<<" "<<t1.num[t1.rt]<<"\n";
	while(t1.num[t1.rt]){
		int a1=0,b1=0,c1=0,d1=0,e1=0,f1=0,a2=0,b2=0,c2=0,d2=0,e2=0,f2=0;
		pii res=t1.split2(t1.rt,0);
		e1=res.fi,a1=res.se;
		int p1=t1.siz[e1]+1;
		res=t1.split1(a1,1);
		a1=res.fi,b1=res.se;
		if(t1.siz[b1]>=k){
			res=t1.split1(b1,k-1);
			b1=res.fi,f1=res.se;
		}
		else{
			res=t1.split1(e1,k-1-t1.siz[b1]);
			c1=res.fi,e1=res.se;
			res=t1.split1(c1,1);
			c1=res.fi,d1=res.se;
		}
		res=t2.split2(t2.rt,0);
		b2=res.fi,a2=res.se;
		int p2=t2.siz[b2]+1;
		res=t2.split1(a2,1);
		a2=res.fi,e2=res.se;
		if(t2.siz[b2]>k){
			res=t1.split1(b2,t2.siz[b2]-k);
			f2=res.fi,b2=res.se;
		}
		else{
			res=t2.split1(e2,t2.siz[e2]-(k-t2.siz[b2]));
			e2=res.fi,c2=res.se;
			res=t2.split1(c2,t2.siz[c2]-1);
			d2=res.fi,c2=res.se;
		}
		// cout<<p1<<" "<<p2<<"\n";
		int g1=t1.newnode(1,0),g2=t2.newnode(1,0);
		if(f1){
			t1.rt=t1.merge(e1,t1.merge(b1,t1.merge(g1,f1)));
		}
		else{
			t1.rt=t1.merge(d1,t1.merge(g1,t1.merge(e1,t2.merge(b1,c1))));
		}
		if(f2){
			t2.rt=t2.merge(f2,t2.merge(g2,t2.merge(b2,e2)));
		}
		else{
			t2.rt=t2.merge(c2,t2.merge(b2,t2.merge(e2,t2.merge(g2,d2))));
		}
		ans.pb({p1,p2});
	}
	printf("%lld\n",ans.size()*2);
	for(auto[l,r]:ans){
		int p1=l,p2=r-k;if(p2<=0)p2+=n;
		printf("%lld %lld\n",p1,p2);
		p2++;if(p2>n)p2-=n;
		printf("%lld %lld\n",p1,p2);
	}
}

// \
444

bool Med;
int T;
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	
//	cerr<<(&Mbe-&Med)/1048576.0<<" MB\n";
	
	T=1;
	while(T--)work();
}

詳細信息

Test #1:

score: 100
Accepted
time: 3ms
memory: 20284kb

input:

6 3
BCCBCC
BBCBBC

output:

4
1 6
1 1
4 4
4 5

result:

ok moves = 4

Test #2:

score: 0
Accepted
time: 0ms
memory: 18212kb

input:

2 1
BC
BC

output:

2
1 1
1 2

result:

ok moves = 2

Test #3:

score: 0
Accepted
time: 2ms
memory: 20284kb

input:

2 1
BB
CC

output:

0

result:

ok moves = 0

Test #4:

score: 0
Accepted
time: 0ms
memory: 18364kb

input:

2 1
CC
BB

output:

0

result:

ok moves = 0

Test #5:

score: 0
Accepted
time: 0ms
memory: 20360kb

input:

3 1
CCC
BBB

output:

0

result:

ok moves = 0

Test #6:

score: 0
Accepted
time: 2ms
memory: 18332kb

input:

3 1
CBC
BCB

output:

2
2 1
2 2

result:

ok moves = 2

Test #7:

score: 0
Accepted
time: 2ms
memory: 20304kb

input:

3 2
BBB
CCC

output:

0

result:

ok moves = 0

Test #8:

score: 0
Accepted
time: 0ms
memory: 18208kb

input:

3 2
BCB
BCC

output:

2
2 2
2 3

result:

ok moves = 2

Test #9:

score: 0
Accepted
time: 2ms
memory: 18340kb

input:

4 2
CCCB
BBCB

output:

2
4 1
4 2

result:

ok moves = 2

Test #10:

score: -100
Wrong Answer
time: 2ms
memory: 18332kb

input:

9 6
CCCBCCCBB
BBBCBBBCC

output:

6
4 7
4 8
8 4
8 5
8 4
8 5

result:

wrong answer The final sequences are not correct!