社区讨论
部分分数据过水:(
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 条回复,欢迎继续交流。
正在加载回复...