求助水题调不出来
查看原帖
求助水题调不出来
315205
Kniqht楼主2023/10/27 16:34

我服了1分钟出思路tm调了30min+

什么鬼东西,多组数据样例过了,test2寄了

但看不出来问题啊

与这位大佬的题解类似:https://www.luogu.com.cn/blog/487539/solution-cf1878d

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int T,n,l[N],r[N],m,a[N];
char s[N];
signed main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&m);
		scanf("%s",s+1);
		for(int i=1;i<=m;i++) scanf("%d",&l[i]);
		for(int i=1;i<=m;i++) scanf("%d",&r[i]);
		sort(l+1,l+m+1);
		sort(r+1,r+m+1);
		int Q,x;scanf("%d",&Q);
		while(Q--){
			scanf("%d",&x);
			int ans=lower_bound(r+1,r+m+1,x)-r;
			int ql=min(x,r[ans]+l[ans]-x),qr=max(x,r[ans]+l[ans]-x);
			a[ql]++,a[qr+1]--;
		}
		for(int i=1;i<=n;i++) a[i]+=a[i-1];
		int last=1;
    	for(int i=1;i<=m;i++){
    	    int L=l[i],R=r[i];
    	    while(L<R){
    	        if(a[L]&1) swap(s[L],s[R]);
    	        //由于是对称翻转
    	        //所以翻转了奇数次,就需要交换
    	        L++,R--;
    	    }
    	}
		printf("%s\n",s+1);
		for(int i=1;i<=n;i++) a[i]=0;
	}
	return 0;
}
2023/10/27 16:34
加载中...