QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#234770#7559. Bocchi the RockkkioWA 1ms7892kbC++176.0kb2023-11-01 22:07:502023-11-01 22:07:51

Judging History

你现在查看的是最新测评结果

  • [2023-11-01 22:07:51]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:7892kb
  • [2023-11-01 22:07:50]
  • 提交

answer

#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2")
#pragma GCC optimize("Ofast","unroll-loops","inline")
#include <bits/stdc++.h>
using namespace std;
namespace Def{
    #define fir first
    #define sec second
    #define lson (tr[i].ls)
    #define rson (tr[i].rs)
    #define FIO(file) freopen(file".in","r",stdin), freopen(file".out","w",stdout)
    #define Untie sync_with_stdio(0), cin.tie(0),cout.tie(0)
    typedef long long ll;
    typedef double db;
    typedef long double ldb;
    typedef unsigned int uint;
    typedef unsigned long long ull;
    typedef pair<int,int> pii;
    typedef pair<ll,ll> pll;
    typedef __int128_t i128;
}
using namespace Def;
namespace FastIO {
	struct IO {
	    char ibuf[(1 << 20) + 1], *iS, *iT, obuf[(1 << 20) + 1], *oS;
	    IO() : iS(ibuf), iT(ibuf), oS(obuf) {} ~IO() { fwrite(obuf, 1, oS - obuf, stdout); }
		#if ONLINE_JUDGE
		#define gh() (iS == iT ? iT = (iS = ibuf) + fread(ibuf, 1, (1 << 20) + 1, stdin), (iS == iT ? EOF : *iS++) : *iS++)
		#else
		#define gh() getchar()
		#endif
		inline bool eof (const char &ch) { return ch == ' ' || ch == '\n' || ch == '\r' || ch == 't' || ch == EOF; }
	    inline long long read() {
	        char ch = gh();
	        long long x = 0;
	        bool t = 0;
	        while (ch < '0' || ch > '9') t |= ch == '-', ch = gh();
	        while (ch >= '0' && ch <= '9') x = (x << 1) + (x << 3) + (ch ^ 48), ch = gh();
	        return t ? ~(x - 1) : x;
	    }
	    inline void read (char *s) {
	    	char ch = gh(); int l = 0;
	    	while (eof(ch)) ch = gh();
	    	while (!eof(ch)) s[l++] = ch, ch = gh();
	    }
	    inline void read (double &x) {
	    	char ch = gh(); bool t = 0;
	    	while (ch < '0' || ch > '9') t |= ch == '-', ch = gh();
	    	while (ch >= '0' && ch <= '9') x = x * 10 + (ch ^ 48), ch = gh();
	    	if (ch != '.') return t && (x = -x), void(); ch = gh();
	    	for (double cf = 0.1; '0' <= ch && ch <= '9'; ch = gh(), cf *= 0.1) x += cf * (ch ^ 48);
	    	t && (x = -x);
	    }
	    inline void pc (char ch) {
	    	#ifdef ONLINE_JUDGE
	    	if (oS == obuf + (1 << 20) + 1) fwrite(obuf, 1, oS - obuf, stdout), oS = obuf; 
	    	*oS++ = ch;
	    	#else
	    	putchar(ch);
	    	#endif
		}
        inline void write (char *s)
        {
            int len = strlen(s);
            for(int i = 0; i < len; i++)pc(s[i]);
        }
		template<typename _Tp>
	    inline void write (_Tp x) {
	    	static char stk[64], *tp = stk;
	    	if (x < 0) x = ~(x - 1), pc('-');
			do *tp++ = x % 10, x /= 10;
			while (x);
			while (tp != stk) pc((*--tp) | 48);
	    }
	    inline void puts(const char *s){
			int len = strlen(s);
			for (int i = 0; i < len; i++)pc(s[i]);
		}
	} io;
	inline long long read () { return io.read(); }
	template<typename Tp>
	inline void read (Tp &x) { io.read(x); }
	template<typename _Tp>
	inline void write (_Tp x) { io.write(x); }
}
using namespace FastIO;
namespace misc{
    constexpr int infi = 1e9;
    constexpr int minfi = 0x3f3f3f3f;
    constexpr ll infl = 1e18;
    constexpr ll minfl = 0x3f3f3f3f3f3f3f3f;
    constexpr int mod = 998244353;
    constexpr int inv2 = (mod+1)/2;
    constexpr int inv3 = (mod+1)/3;
    mt19937_64 rnd(0x3494393);
    template<typename T,typename E>
        inline T ksm(T b,E p){T ret=1;while(p){if(p&1)ret=1ll*ret*b%mod;b=1ll*b*b%mod;p>>=1;}return ret;}
    template<typename T,typename E>
        inline void cmax(T &a,E b){a<b?(a=b,1):0;}
    template<typename T,typename E>
        inline void cmin(T &a,E b){a>b?(a=b,1):0;}
    template<typename T,typename E>
        inline void cadd(T &a,E b){a+=b;while(a>=mod)a-=mod;}
    template<typename T,typename E>
        inline void cmul(T &a,E b){a=1ll*a*b%mod;}
    template<typename T,typename E> 
        inline T inv(T v){return ksm(v,mod-2);}
    template<typename T,typename E>
        inline T madd(T a,E b){return a+b>=mod?a+b-mod:a+b;}
    template<typename T,typename E>
        inline T mmul(T a,E b){return 1ll*a*b%mod;}
    template<typename T>
        struct dseg{T *first,*last;dseg(T* _l,T* _r):first(_l),last(_r){}};
    inline void debug(void){cerr<<'\n';}
    template<typename T,typename... arg>
        inline void debug(T x,arg... r){cerr<<x<<' ';debug(r...);}
    template<typename T,typename... arg>
        inline void debug(dseg<T> A,arg... v){cerr<<"[ ";for(T* i=A.first;i!=A.last;++i)cerr<<*i<<' ';cerr<<"] ";debug(v...);}
    #define binom(n,m) (n<0||m<0||n<m?0:1ll*fac[n]*ifac[m]%mod*ifac[n-m]%mod)
    template<typename T>
        inline T randseg(T l,T r){return rnd()%(r-l+1)+l;}
    #define likely(x) (__builtin_expect(!!(x),1))
    #define unlikely(x) (__builtin_expect(!!(x),0))
}
using namespace misc;
const int maxn=1e5+10;
int n,f[2][maxn][2][2];
char s[maxn];
inline void trans(int o,int cp,int ce,int lim)
{
    cadd(f[o^1][0][0][ce],f[o][0][0][ce]),cadd(f[o^1][1][cp][ce],f[o][0][0][ce^1]);
    for(int len=1;len<=lim;len++)
    {
        cadd(f[o^1][len][0][ce],f[o][len][0][ce]);
        cadd(f[o^1][len][1][ce],f[o][len][1][ce]);
        cadd(f[o^1][len-1][!cp][ce],f[o][len][cp][!ce]);
        cadd(f[o^1][len+1][cp][ce],f[o][len][!cp][!ce]);
    }
}
int main()
{
    n=read();n<<=1;
    io.read(s);
    if(s[0]!='Y')f[0][0][0][1]=1;
    if(s[1]!='P')f[0][0][0][0]=1;
    for(int i=1,o=0;i<n-1;i+=2)
    {
        memset(f[o^1],0,sizeof f[o^1]);
        if(likely(s[i]!='B'&&s[i+1]!='P'))trans(o,0,0,i/2);
        if(likely(s[i]!='B'&&s[i+1]!='Y'))trans(o,0,1,i/2);
        if(likely(s[i]!='R'&&s[i+1]!='P'))trans(o,1,0,i/2);
        if(likely(s[i]!='R'&&s[i+1]!='Y'))trans(o,1,1,i/2);
        for(int e=0;e<=1;e++)cadd(f[o^1][0][0][e],f[o^1][0][1][e]),f[o^1][0][1][e]=0;
        o^=1;
    }
    int o=(n/2-1)&1;
    int ans=0;
    cadd(ans,f[o][0][0][0]),cadd(ans,f[o][0][0][1]);
    if(s[n-1]=='?')cmul(ans,2);
    if(s[n-1]!='B')cadd(ans,f[o][1][0][0]),cadd(ans,f[o][1][0][1]);
    if(s[n-1]!='R')cadd(ans,f[o][1][1][0]),cadd(ans,f[o][1][1][1]);
    write(ans);
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

2
????

output:

12

result:

ok 1 number(s): "12"

Test #2:

score: 0
Accepted
time: 0ms
memory: 7816kb

input:

3
??YR?B

output:

4

result:

ok 1 number(s): "4"

Test #3:

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

input:

5
YBYRPBYRYB

output:

0

result:

ok 1 number(s): "0"

Test #4:

score: -100
Wrong Answer
time: 1ms
memory: 7892kb

input:

10
PRPBPRPRPRPBYB?R?BY?

output:

5

result:

wrong answer 1st numbers differ - expected: '3', found: '5'