QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#261330#7743. Grand Finaleucup-team1447WA 142ms103988kbC++142.2kb2023-11-22 20:22:262023-11-22 20:22:27

Judging History

This is the latest submission verdict.

  • [2023-11-22 20:22:27]
  • Judged
  • Verdict: WA
  • Time: 142ms
  • Memory: 103988kb
  • [2023-11-22 20:22:26]
  • Submitted

answer

// what is matter? never mind. 
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,sse4,popcnt,abm,mmx,avx,avx2") 
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
#define ll long long
#define ull unsigned long long
using namespace std;
inline int read()
{
    char c=getchar();int x=0;bool f=0;
    for(;!isdigit(c);c=getchar())f^=!(c^45);
    for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
    if(f)x=-x;return x;
}

#define fi first
#define se second
#define pb push_back
#define mkp make_pair
typedef pair<int,int>pii;
typedef vector<int>vi;
 
#define maxn 5005
#define inf 0x3f3f3f3f

int n,m,up,T;
char t[maxn],s[maxn];
int a[maxn],s0[maxn];
int f[maxn][maxn],g[maxn][maxn];

void work(int O)
{
	n=read(),m=read();
	cin>>(t+1);
	cin>>(s+1);
	For(i,1,m){
		if(s[i]=='Q')a[i]=1;
		if(s[i]=='B')a[i]=2;
		if(s[i]=='W')a[i]=0;
		s0[i]=s0[i-1]+(a[i]==0);
	}
//	memset(f,63,sizeof f);
	up=n+m;
	For(i,0,up) f[m+1][i]=f[m+2][i]=0;
	Rep(i,m,1){
		For(j,0,up){
			f[i][j]=inf;
			// draw 1
			if(j) f[i][j]=min(f[i][j],f[i+1][j-1+(a[i]==1)]-(a[i]==2));
			// draw 2
			if(i+2>=m) f[i][j]=min(f[i][j],1);
			else f[i][j]=min(f[i][j],max(0,f[i+2][j+(a[i]==1)]-(a[i]==2))+1);
			f[i][j]=max(f[i][j],0);
//			cout<<"i,j "<<i<<" "<<j<<" "<<f[i][j]<<"\n";
		}
	}
	int c1=0,c2=0,c0=0,res=inf;
	For(i,1,n){
		if(t[i]=='Q')++c1;
		else if(t[i]=='B')++c2;
		else ++c0;
	}
	For(i,0,m) For(j,0,up) g[i][j]=-inf;
	g[0][c1]=c2;
	For(i,0,m-1){
		For(j,0,up){
			if(g[i][j]==-inf)continue;
			// use 1
			if(j){
				int nj=j-1+(a[i+1]==1);
				g[i+1][nj]=max(g[i+1][nj],g[i][j]+(a[i+1]==2));
			}
			if(g[i][j]>0 && i+2<=m){
				int nj=j+(a[i+1]==1)+(a[i+2]==1);
				g[i+1][nj]=max(g[i+1][nj],g[i][j]-1+(a[i+1]==2)+(a[i+2]==2));
			}
		}
	}
	For(i,0,m){
		For(j,0,up){
			if(g[i][j]>=f[i+1][j]){
				res=min(res,c0+s0[i]+j+g[i][j]);
			}
		}
	}
	if(res==inf)puts("IMPOSSIBLE");
	else cout<<res<<"\n";
}

signed main()
{
//	freopen("data.in","r",stdin);
//	freopen("my.out","w",stdout);
	T=read();
	For(_,1,T)work(_);
    return 0;
}
/*

*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5664kb

input:

2
2 6
BG
BQWBWW
4 6
GQBW
WWWWQB

output:

3
IMPOSSIBLE

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 1ms
memory: 5752kb

input:

2
3 8
QBG
BBBWBWWW
3 8
QBG
BBBWBWWW

output:

3
3

result:

ok 2 lines

Test #3:

score: -100
Wrong Answer
time: 142ms
memory: 103988kb

input:

13
184 887
WBQBBWWBQBQBQBWWBBQQWWQQQBBBQWWWQWBBBBWWWQQBQQQWQBBQQWQQBBWWQWQQBWBQWWWWQWQQWQBWWQQWWQQBWWQWBBBWWQWBQBQWQQWWBQBQQBWQBQBWWBWQWQWBWBQWWQBQQQBWQQWQWWBQBWWQQBQWBQQBQQBQBBQBWBQQWWQBWBBQQBQG
QWBQBQBWBQQWWWWQBBBQQQBBBWWWWQWQWWQQQBQBWQQQBWQWQBWWBQQQWQWBQBBQBWBBWBQWQBWWQQBWQQWWQWWQQWBQQWQWBBQBWBQQ...

output:

184
239
282
161
118
326
240
346
178
193
33
160
297

result:

wrong answer 2nd lines differ - expected: '372', found: '239'