社区讨论

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjob0kf
此快照首次捕获于
2025/11/04 05:49
4 个月前
此快照最后确认于
2025/11/04 05:49
4 个月前
查看原帖
有没有大佬帮忙改好啊
大样例如下:
CPP
10
100 12 16
LDRLLRLRDDDLDDLLLRDLLUDULRUUULLDDLLDDRRRLUUDLRRRDUDRDLDLULDDRLRDUDUUUUDURLUDLLURRRRLRRLULUDRRRUDDLUD
100 13 10
DDUULURRDDLRDUDLLDLRDRLDRRRLRRUUURDURRLLULUUDUULLRRURRRULUUUURUUURRRUULRUURRDDULLLLRUDRLUULDLDRRDDLU
100 15 9
RUDLLRUDLRDDURLURLDULRDRRRUDULDLLURLUURLLDRUDDULLLDDRRRLLRDLLLRUDLLDLLRRDDRLLDDDDRRDRRRRDDDULURDULUL
100 13 18
RLUUURUULDUURLLLDRULLLDRLUDDDLRRUDLLRURDRUUDDURLUUDRRUDLLRDURLDRURDRLLDLRRLDLUULUULLDURUUURDRLRLLDRD
100 3 3
UULDULLLLLLUULLRLRURRUURRLRRRLLLLRRLLULUDUURUDDULLDLRRDLLLDLULLLUULRRRRLRRRURULDDLURLURUDDLRRLDRRRUL
100 1 3
RRLLLRLLLRUDRRLLRDLUURRUURDDRRULLURDLDLUURLLLULDDLLRLULLRDUDLLRUDDRLLUULRULLDURDDULUDLDDDLDDDDRDRLRR
100 8 0
DRDDULLRRLLUDLUDLLRLRLRRUUULDLRLURLDDRLRLUDDDLURRLRRLRDDDUDDDRLRRURDULLLLURLDDDDRULLLLUURDLRULDRDLDL
100 11 17
LRDRDRDDRLLUDULDRRULRRUULLUDLURRRRRLRLRUUURLDDDLRRDURRLDDUUDUDDLDRLRLUDLLDRDDUDRRDUDULLUUDRURLLLULRR
100 4 4
ULDUUDURURDRRRLRRLLULRDLDLDRRDRDDDLDRDRUUDRDDUDLUDDDDLDRRUULDRLLURLURRLUULURRULDDURDRDURLRLRRDRUDDDR
100 8 17
RDLULDUDULDLULDLUDDDLULRRDLLUDDDUDLRRDLURDRULRLLRLDDDULLUDUUDULRLDLUDUURDLDDDULDDDRDLUDDUULUDRDLUDUU

CPP
29
Impossible
Impossible
Impossible
12
13
Impossible
21
Impossible
Impossible

CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
int n,x,y;
char str[N];
int sx[N],sy[N];
bool check(int len){
	for(int i=1;i+len-1<=n;++i){
		int j=i+len-1;
		int xx=sx[n]-(sx[j]-sx[i-1]),yy=sy[n]-(sy[j]-sy[i-1]);
		if(abs(x-xx)+abs(y-yy)<=len and (len-abs(x-xx)-abs(y-yy))%2==0)  return true;
	}
	return false;
} 
void solve(){
	cin>>n>>x>>y;
	cin>>str+1;
	if(abs(x-y)>n or (n-x-y)%2){
		cout<<"Impossible"<<endl;
		return ;
	}
	for(int i=1;i<=n;++i){
		sx[i]=sx[i-1];
		sy[i]=sy[i-1];
		if(str[i]=='U')  sy[i]++;
		else if(str[i]=='D')  sy[i]--;
		else if(str[i]=='L')  sx[i]--;
		else if(str[i]=='R')  sx[i]++;
	}
	int l=0,r=n;
	while(l<r){
		int mid=l+r>>1;
		if(check(mid))  r=mid;
		else l=mid+1;
	}
	cout<<l<<endl;
	return ;
}
signed main(){
	int T;
	cin>>T;
	while(T--){
		solve();
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...