hackercupai/hackercup huggingface dataset:
// RAINBOW STRING // Official Solution by Jacob Plachta #define DEBUG 0
#include #include #include #include #include #include #include #include
#include #include #include #include #include #include #include #include
#include #include #include #include #include #include using namespace
std; #define LL long long #define LD long double #define PR pair #define
Fox(i,n) for (i=0; i=0; i--) #define FoxR1(i,n) for (i=n; i>0; i--) #define
FoxRI(i,a,b) for (i=b; i>=a; i--) #define Foxen(i,s) for (i=s.begin();
i!=s.end(); i++) #define Min(a,b) a=min(a,b) #define Max(a,b) a=max(a,b)
#define Sz(s) int((s).size()) #define All(s) (s).begin(),(s).end() #define
Fill(s,v) memset(s,v,sizeof(s)) #define pb push_back #define mp make_pair
#define x first #define y second template T Abs(T x) { return(x<0 ? -x : x); }
template T Sqr(T x) { return(x*x); } string plural(string s) { return(Sz(s) &&
s[Sz(s)-1]=='x' ? s+"en" : s+"s"); } const int INF = (int)1e9; const LD EPS =
1e-9; const LD PI = acos(-1.0); //#if DEBUG #define GETCHAR getchar /*#else
#define GETCHAR getchar_unlocked #endif*/ bool Read(int &x) { char c,r=0,n=0;
x=0; for(;;) { c=GETCHAR(); if ((c<0) && (!r)) return(0); if ((c=='-') &&
(!r)) n=1; else if ((c>='0') && (c<='9')) x=x*10+c-'0',r=1; else if (r) break;
} if (n) x=-x; return(1); } #define LIM 400005 int N,SZ; char S[LIM],C[LIM];
int sum[LIM][26]; int sz,P[20][LIM]; pair V[LIM]; int O[LIM],ind[LIM]; vector
Q[LIM],A[LIM],B[LIM]; int BLT[(1<<18)+1]; void BuildSuffixArray() { int i,s;
if (N==1) { sz=1; P[0][0]=0; return; } Fox(i,N) P[0][i]=S[i]; for (sz=s=1;
s=BLT[t]) { i=t; k-=BLT[t]; } b>>=1; } return(i); } int main() { if (DEBUG)
freopen("in.txt","r",stdin); int T,t; int M; int i,j,k,c,s; LL ans[26];
Read(T); Fox1(t,T) { Read(N),Read(M); scanf("%s%s",&S,&C); Fox(i,M) {
Read(j),Read(k); Q[j].pb(k); } Fill(sum,0); Fox1(i,N) Fox(j,26)
sum[i][j]=sum[i-1][j]+bool(S[i-1]=='A'+j); BuildSuffixArray(); Fox(i,N) {
O[i]=P[sz-1][i]; ind[O[i]]=i; } j=k=1; FoxR(i,N) { j++,k++; if (C[i]=='G')
j=1; if (C[i]=='R') k=1; if (j