社区讨论

部分分数据过水:(

P13731【MGVOI R1-C】收集括号(brackets)参与者 3已保存回复 6

讨论操作

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

当前回复
6 条
当前快照
1 份
快照标识符
@mhjh2uex
此快照首次捕获于
2025/11/04 02:27
4 个月前
此快照最后确认于
2025/11/04 02:27
4 个月前
查看原帖
5∼8测试点的大样例我在luogu上都 TLE 了交上去居然40pts
my code
CPP
#include<bits/stdc++.h>
using namespace std;
char s[310][310];
char t[310][310];
int n,m,p;
int a[310],b[310],f[310],k[310];
int mn=1e9;
void Bob_work(int l,int right,int down){
	if(l==n+m-1){
		int x=1,y=1;
		int L=0,R=0;
		int flag=0;
		for(int i=1;i<=n+m-2;i++){
			if(t[x][y]=='L')L++;
			else if(t[x][y]=='R')R++;
			else{
				flag=1;
				break;
			}
			if(R>L){
				flag=1;
				break;
			}
			if(k[i]==0)y++;
			else x++;
		} 
		if(!flag){
			if(t[x][y]=='L')L++;
			else if(t[x][y]=='R')R++;
			else flag=1;
			if(R>L)flag=1;
		}
		if(L!=R)flag=1;
		if(flag)return;
		mn=min(mn,p);
		return;
	} 
	if(right<m-1){
		k[l]=0;//往右走 
		Bob_work(l+1,right+1,down);
    }
    if(down<n-1){
		k[l]=1;//往下走 
		Bob_work(l+1,right,down+1);
	}
	return;
}
void Alice_work(int l){
	if(l==n+m+1){
		p=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				t[i][j]=s[i][j];
			}
		} 
		for(int i=1;i<=n;i++)if(f[i]){
			p+=a[i];
			for(int j=1;j<=m;j++){
				if(t[i][j]=='L')t[i][j]='R';
				else if(t[i][j]=='R')t[i][j]='L';
			}
		}
		for(int i=1;i<=m;i++)if(f[n+i]){
			p+=b[i];
			for(int j=1;j<=n;j++){
				if(t[j][i]=='L')t[j][i]='R';
				else if(t[j][i]=='R')t[j][i]='L';
			}
		}
		Bob_work(1,0,0);
		return;
	}
	f[l]=0;
	Alice_work(l+1);
	f[l]=1;
	Alice_work(l+1);
	return;
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		mn=1e9;
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;i++){
			scanf("%d",&a[i]);
		}
		
		for(int i=1;i<=m;i++){
			scanf("%d",&b[i]);
		}
		for(int i=1;i<=n;i++){
			scanf("%s",s[i]+1);
		}
		Alice_work(1);
		if(mn==1e9)printf("-1\n");
		else printf("%d\n",mn);
	}
	return 0;
}

回复

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

正在加载回复...