QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#17072#1790. 机器人游戏Qingyu100 ✓19ms13628kbC++203.6kb2022-01-01 18:11:382022-05-04 13:09:18

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-05-04 13:09:18]
  • 评测
  • 测评结果:100
  • 用时:19ms
  • 内存:13628kb
  • [2022-01-01 18:11:38]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define MOD 1000000007
typedef unsigned int uint;
typedef pair <int, int> pii;
const int N = 65537, M = 1005, w[] = {3, 3, 3, 2, 3, 2, 1, 1, 3, 1, 2, 1, 2, 1, 1, 1};
int n, m, n1, n2, len[M], popcnt[N], p2[N], p3[N], f[N][4], ans, prod[N][2], dp[33][N][2];
uint mask[M][4]; char str[105], s[M][105];
inline int PLUS(int x, int y) {
	x += y;
	return x >= MOD ? x - MOD : x;
}
inline void Insert(int s0, int s1, int s2, int s3) {
	s2 ^= s0 | s1 | s3;
	f[s0][0] ++, f[s1][0] ++, f[s3][0] ++, f[s2][1] ++;
	f[s0|s1][2] ++, f[s1|s3][2] ++, f[s0|s2][3] ++, f[s2|s3][3] ++;
}
inline void FMT(int n) {
	for (int i=0; i<n; i++)
		for (int j=1; j<1<<n; j++)
			if (j & 1 << i)
				for (int k=0; k<=3; k++)
					f[j ^ 1 << i][k] += f[j][k];
}
#define Get(i) 1ll * p3[f[i][0] + f[i][1]] * p2[f[i][2] + f[i][3] - (f[i][0] + f[i][1] << 1)] % MOD
#define trans(_i, _j, _k, cj, ck) \
	dp[_i][_j][_k] = (dp[_i][_j][_k] + 1ll * dp[i][j][k] * prod[cj][ck]) % MOD, \
	dp[_i][_j|1][_k] = (dp[_i][_j|1][_k] + 1ll * (MOD - dp[i][j][k]) * prod[cj|1][ck]) % MOD
int main() {
	cin >> n >> m, n1 = max(n, 2) >> 1, n2 = n - n1, p2[0] = p3[0] = 1;
	for (int i=1; i<=n*m; i++)
		p2[i] = PLUS(p2[i-1], p2[i-1]), p3[i] = PLUS(p3[i-1], PLUS(p3[i-1], p3[i-1]));
	for (int i=1; i<1<<max(n1,n2); i++)
		popcnt[i] = popcnt[i>>1] + (i & 1);
	for (int i=1; i<=m; i++) {
		scanf ("%s", str);
		s[i][len[i]=1] = 2;
		for (auto j : str) {
			if (! j) break;
			isdigit(j) ? s[i][len[i]] = (j - '0') * 3 : j == '*' ? s[i][len[i]] ^= 3 : s[i][++len[i]] = 2;
		}
		if (len[i] > n) continue;
		for (int j=1; j<=len[i]; j++)
			mask[i][s[i][j]] |= 1u << j - 1;
		int lim = (1 << n1) - (1 << n1 - min(n1, n - len[i] + 1));
		for (int j=1; j<=n1; j++)
			Insert(mask[i][0] << n1 - j & lim, mask[i][1] << n1 - j & lim, lim, mask[i][3] << n1 - j & lim);
		for (int j=n1+1; j<=n; j++)
			Insert(mask[i][0] >> j - n1 & lim, mask[i][1] >> j - n1 & lim, lim, mask[i][3] >> j - n1 & lim);
	} FMT(n1);
	for (int i=1; i<1<<n1; i++) {
		int _ = Get(i);
		ans = PLUS(ans, popcnt[i] & 1 ? _ : MOD - _);
		for (int j=0; j<=3; j++)
			f[i][j] = 0;
	}
	for (int l=1; l<=n2; l++) {
		int cnt = 0, lim = (1 << l) - 1;
		for (int i=1; i<=m; i++)
			if (len[i] <= l) {
				++ cnt;
				Insert(mask[i][0] & lim, mask[i][1] & lim, lim, mask[i][3] & lim);
			}
		if (! cnt) continue;
		FMT(l);
		for (int i=1; i<1<<l; i++) {
			prod[i][0] = Get(i), prod[i][1] = 1ll * p3[f[i][1]] * p2[f[i][3] - (f[i][1] << 1)] % MOD;
			for (int j=0; j<=3; j++)
				f[i][j] = 0;
		}
		prod[0][0] = prod[0][1] = p3[cnt];
		for (int i=1; i<=n-l+2; i++)
			for (int j=0; j<1<<l-1; j++)
				dp[i][j][0] = dp[i][j][1] = 0;
		dp[1][0][0] = 1; lim >>= 1;
		if (l == 1) {
			for (int i=1; i<n; i++)
				dp[i+1][0][0] = 1ll * dp[i][0][0] * prod[0][1] % MOD, 
				dp[i+1][0][1] = (1ll * (MOD - dp[i][0][0]) * prod[1][1] + 1ll * dp[i][0][1] * (prod[0][1] + MOD - prod[1][1])) % MOD;
			ans = (ans + 1ll * dp[n][0][0] * prod[1][0] + 1ll * dp[n][0][1] * prod[1][1]) % MOD;
		} else {
			for (int i=1; i<=n-l+1; i++)
				for (int j=0; j<1<<min(i,l)-1; j++)
					for (int k=0; k<=1; k++)
						if (dp[i][j][k])
							trans(i + 1, j << 1 & lim, k | (bool) (j & 1 << l - 2), j << 1, k | (i != n - l + 1));
			for (int j=1; j<=lim; j+=2)
				for (int k=0; k<=1; k++)
					if (dp[n-l+2][j][k]) {
						int c = 1, _j = j, _k = k;
						for (int i=n-l+2; i<=n; i++)
							c = 1ll * c * prod[_j<<1][_k] % MOD, _k |= (bool) (_j & 1 << l - 2), (_j <<= 1) &= lim;
						ans = (ans + 1ll * c * (MOD - dp[n-l+2][j][k])) % MOD;
					}
		}
	} return cout << ans << endl, 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 4
Accepted
time: 0ms
memory: 5712kb

input:

1 1
0

output:

3

result:

ok single line: '3'

Test #2:

score: 4
Accepted
time: 0ms
memory: 5808kb

input:

1 1
*

output:

3

result:

ok single line: '3'

Test #3:

score: 4
Accepted
time: 0ms
memory: 5700kb

input:

8 1
RRRR

output:

6561

result:

ok single line: '6561'

Test #4:

score: 4
Accepted
time: 0ms
memory: 5716kb

input:

16 1
1*RR0RRRR1RRR0*R

output:

228047430

result:

ok single line: '228047430'

Test #5:

score: 4
Accepted
time: 5ms
memory: 6492kb

input:

32 1
RRRRRRRRR*R0RRR*R*0RRRRRRRRRR1R*1R*

output:

456286566

result:

ok single line: '456286566'

Test #6:

score: 4
Accepted
time: 5ms
memory: 8048kb

input:

32 1
R11RRR*RR1RR0RRRR1RRRR*0R*RRRR1RRRRR1R*RRR

output:

987597859

result:

ok single line: '987597859'

Test #7:

score: 4
Accepted
time: 2ms
memory: 7724kb

input:

16 5
0RRR0
R*RRR
RRRRRR
RRR1R0R
R1*RRRRRRRR1R1RR1RRR

output:

920870788

result:

ok single line: '920870788'

Test #8:

score: 4
Accepted
time: 11ms
memory: 12100kb

input:

32 5
RRRRRRRR1*RRR
R1R*0R1R***1RRRRRRRRR**RRRRR01*01RR0R*R*RRR
R0RRRRR0RRR0R0RRR0R*RRRR*RR0RR
R1RRRRRRRRR*0RRRR1RR10R*RRR1R11RRRR01*
0R0R0RR0R11RRR0RR0RRR**1*RRR1RRRR0*0RR1R

output:

724757213

result:

ok single line: '724757213'

Test #9:

score: 4
Accepted
time: 14ms
memory: 12632kb

input:

32 5
R1*R*RRRRRRRRRRR01R*R0
1R0RRRR1RR1R***RR0R*RR*RRR*1RR
0
1RRRR0RRRRR1R1RRRR0RRR01R*R01
RRRRR1RRRRRR

output:

339267352

result:

ok single line: '339267352'

Test #10:

score: 4
Accepted
time: 10ms
memory: 12112kb

input:

32 5
RRR*0RR*RR1R1*R10RRRRRR1RRRR1
0RR*RRRRR*R*R0
0RRRR*RRR
0R1RRRRR0RRRRR0RRRR**0RRRRRRRRRRRRRRR
RRRR01RR0R1R0R*R1RR10RRRRRRRR0RR*R0RRR1R

output:

305204884

result:

ok single line: '305204884'

Test #11:

score: 4
Accepted
time: 4ms
memory: 8236kb

input:

16 1000
RRRRRR1RRRRR*RRR
RRR1RR*0RRR1RRR
R0RR11RRR*RRRR0R0R
R1
RRR1RRRRRR1RRR10*
RR*RRR1RRRRRRRR
RR
RRRRRRRRR*R
R*
1RRR*R00*
R0R0R*RRRR
RRRRR000RR
R1R1R1*RRRRRR*
RR1*0*1RRRRRR*RRRRRR
RR
RRRRRRR*R
0RR*RRRRRRRRRRRR10R
RRR*RR1RRRR0RRR*0RRRR
R*1R1RRRR1RRRRRRR
RRRRRRRRR
RRRRR*RRRRR
RR0RR10RR11R
*
0
R1*RR...

output:

278439170

result:

ok single line: '278439170'

Test #12:

score: 4
Accepted
time: 4ms
memory: 8068kb

input:

16 1000
*
RRR0R*0RR
*RRRRRRR0RRR1RRR1RRR
R*RRRRRR11RRRRRRR1R
R
R0R
0RRRRRR1RRRRR
RR**0*R0R
0***R*R*1R
11RRRRRRRRR1RR1
1RR
RR1R
RRRRR0R*R10RRR1RRR1R
RR1R**RR10
1
RRRRRRRR*
R1RRRRRRR0R*RR
*RR*R1*
R0RR
RR1R0RR1*RRRRRRRR1
R
RRR1RRRR1*RRRRR*RRR*
RRR0RRRRR0RR0R1
RRRRRRRRRRRR
R
R0RR1RRR1RR1
**RRRRRR1*RRRR1...

output:

937144102

result:

ok single line: '937144102'

Test #13:

score: 4
Accepted
time: 18ms
memory: 12908kb

input:

32 1000
0
*
0
1
0
0
*
*
0
0
*
1
*
0
1
*
0
0
1
1
1
1
*
0
1
0
0
1
1
*
1
0
0
1
*
0
0
0
*
1
*
0
*
0
*
0
0
*
0
*
*
0
0
1
*
0
*
0
0
1
1
*
0
0
*
1
*
*
*
0
0
1
0
0
*
*
*
0
0
0
0
*
*
*
1
1
*
0
*
0
*
0
*
0
1
*
*
*
*
0
1
0
0
*
0
0
*
0
1
*
0
*
*
1
1
*
0
*
0
1
0
*
1
*
1
1
1
*
0
1
*
*
1
0
1
1
0
0
0
0
0
0
0
1
*
1
...

output:

675565814

result:

ok single line: '675565814'

Test #14:

score: 4
Accepted
time: 18ms
memory: 12672kb

input:

32 1000
*
*
0
*
*
*
0
0
*
0
*
1
*
*
0
0
1
1
1
0
0
*
0
1
0
*
*
0
0
1
1
0
*
1
*
*
0
0
1
0
*
*
0
0
1
0
0
*
*
*
1
1
1
1
*
1
0
1
1
*
1
*
0
1
*
*
*
*
*
0
0
1
1
1
1
0
1
1
0
1
0
*
*
*
*
1
0
1
0
0
1
0
0
1
1
0
1
*
*
1
1
0
0
0
1
*
1
*
0
1
0
0
0
*
0
*
0
0
*
0
0
1
1
0
1
0
0
0
1
*
0
0
*
1
1
0
1
*
*
1
1
1
0
1
1
1
...

output:

969266411

result:

ok single line: '969266411'

Test #15:

score: 4
Accepted
time: 10ms
memory: 12160kb

input:

32 1000
1
0
0
1
0
1
0
*
0
1
1
0
0
1
0
1
0
0
1
0
*
0
*
*
*
0
0
*
0
1
0
0
0
1
0
0
*
0
0
*
*
*
*
0
*
1
*
0
0
1
1
1
1
0
1
*
*
*
0
*
1
*
0
*
1
*
0
0
1
*
*
1
1
*
0
0
1
1
*
*
1
*
0
*
*
*
0
*
0
1
0
*
*
*
0
1
0
1
0
0
1
*
*
0
0
0
0
1
*
1
1
*
*
0
0
1
1
1
0
0
*
*
1
*
1
*
1
*
*
*
0
0
0
1
1
1
0
1
0
*
1
*
1
0
0
1
...

output:

648679786

result:

ok single line: '648679786'

Test #16:

score: 4
Accepted
time: 18ms
memory: 12552kb

input:

32 1000
R1R0RRRRR0R*R1RRRRR**
RRR0R0RR*RRRR
1R*RR0R00RRR
0RRRRRRRRRRR
R1RRRRRR0RR1RRR1
R0R
RRR0RRRRRR**RRR*0RR0
0
R1RR1RRRRR0
RR0*R0RRRRRRR*1RRR
R*1*RRR
RRRRRRRRRR*1R00RR*0*RR00
RRRR1RRRRR
RRR*RRR1RRR*RRR1RRR
R0
1RRRRR*R1RRR*R1
RR1RRRRRR
R1110*RRRRR***RRRR1RRRR
0*R00R1RR0RRR
RRRRR100RR*RRRRR
*
0R1RR...

output:

19340709

result:

ok single line: '19340709'

Test #17:

score: 4
Accepted
time: 14ms
memory: 13304kb

input:

32 1000
RR
1*RRRR1R
R0R
R0R*RRR*RR**R*R*RRR*RR
R
R0RRRRR101RRR
0RRR1RRRRR
0*R*
RRRRRR0RRR1R0RR0R
RRRR01R
1R0RRR0RRRRRR
R0R1R
**1RRRR1
R1R
RR1RRRRRR0RRRRRR
R*R11RRRR***RR*RRRR
RRR1*0RRRR00*R*RRRR1R
RRR
*R*RRR
RRRRRR*RR1RRR1RRRR
RRRRR0RRRRRR
RR11RR
R1RRRRR
R00RR1**RRRRRRRR1RRR
*RR0RR*R1*RRRRR01*0R*
RR...

output:

484551342

result:

ok single line: '484551342'

Test #18:

score: 4
Accepted
time: 11ms
memory: 13524kb

input:

32 1000
1R1RRRR
R0*1RRR1RRRRRRRRRR0R0
0RRR
RRR0RR*R*RRR
01RRRR0RRRRR*R0RRR*R
RR*
*RR1RRRRRRR*R
RR1RRR**RRRR0RRRR*
R**1RRRR0RRR0R1RR1R1RR1
RRRRR*10R
RR*1R1RRRRR1RRR
RR
RRR**1R1RR1
RRR1RR0RR1*1RRRRR*R0R
RRR*
RRRRR11RR
RRRRR1R*RR
R1RRRRR**RR
0R*R10*RR1RRR
11R1R*RRR
1RRRRRR0RRRRRR0**RR
R*1RRR1R0RRRRR
*
...

output:

907694742

result:

ok single line: '907694742'

Test #19:

score: 4
Accepted
time: 18ms
memory: 13248kb

input:

32 1000
RRRRR0RR0RR
RRRR*0RR0RRRRR*R0RR
RR0
0RR
0RRRRRRRRRR0RRRR1R
RRRR
RRR
R1RRRRR*
RR1RRRRR0RR1
0RRR0
RRRR0RRRRRRRRRRR1
RR*RRR1R*R
RRR*R*0RRR
RRRRR
RRRR1RRRR0R0RR*RR
R
R*11R1*RRRR
RR0RRRR0R0RRRR*1R
*RR0RR*R*RRR0
RR*R0*R1R1*RR10RR
R*R
RRRR
0RRRRRRRR
RR001RR
R1RRRRR*
RR**
1RR10R*R
RR1RRRRRRRRRRR*
RR...

output:

424231090

result:

ok single line: '424231090'

Test #20:

score: 4
Accepted
time: 12ms
memory: 12360kb

input:

32 1000
1RRRRRRR*RR*RRR*R
*RR
RRRRRRR1RR01R1*R
*11RRR0RR*RR1
RRRRR*R1RRRRRRR
1RR
**RRRRR
RRRRR1R1RR011R
*R*RRR*R0*0R1*RRRRRRRR
RRRR*RRRRR00RR
RRRRRRR0RRRR0RR1*R1
000RRRRR1RR1R
RR
RRR0RRRRRR00R
RRR1RRRRRRR*00RRRR
RRRRRRR0R11RR0RR1
1RRRRR0R10RRR0RRR
RRRRR0R1*RRR
RRR*RRRRR0RRR*R
RRRRR1R0RR
RRRRR1RRRRRR...

output:

577668630

result:

ok single line: '577668630'

Test #21:

score: 4
Accepted
time: 5ms
memory: 12160kb

input:

32 1000
R0
0
11RR0RR
RRRR0RR010000R
RRRRRR*RRRRR0R*RRR
RRRR
RRRRRRRR
R*RRRR1*0R
R*RR**RRR0
*
RRRR1R1*R1RR0RR01RRR0
RR1R0RR*1*RRRR0R*R*
RRR*0RR*RR00RRR*RRR1*R
1R*R10RRRRRRR11RR1
RRRRRRRRRR0RR
0RR*R1R11RR*R*RRRR*R
RRR
*0R11RRR
1*1R
R1R1R*0RR0RRR*00RR1RR1RR1
R1**RRRR1R*RRRRRRRR
1
**RRRR1RRRRR1RRR1*R**
...

output:

819220679

result:

ok single line: '819220679'

Test #22:

score: 4
Accepted
time: 7ms
memory: 12328kb

input:

32 1000
R0RRR00*R1R0R0R00RRRR
RR*0RRRRRRRRRRRRR*0RRRRRR
RRRRRRRRR
0R10RR1RRRR*
RRRRRRR1RRRRRRRRR*RR1RRRRR00RRRRRRR
R0RRR
RRR1RRRRRR1RRR10*RRRRRR
RRR*RRRRR*RR0RR
RRRR01RRRRR
RRR1RRRRRRRRR1R
0RRR1**RRR1R1R1RRRR*1RR1RRRRRRRR1R0RRRR*RRRR*R
R*RRR0RRRRR
R*RR1RRRRRRRRR*0RR*RR0R*RRRRRR*R1R1RRRR
RR0RR*RRR1R0...

output:

691327935

result:

ok single line: '691327935'

Test #23:

score: 4
Accepted
time: 11ms
memory: 13276kb

input:

32 1000
RRRRRR0*RRRRRRR0RRRRRRRRRRRR
RRR0*1RRRR0RRRR
RRRRR1R
0R0RRR011RRRRRRRR
0RR0RR*RR*RR*RRRRRRRR*
1RR0RRRRRR**0RR1R0**RR0*RRRR*RRR*
RRR00RR1RRR**R*
R01RRRR11R0*0R1*RRRRRRRR*RR0R0RR*00R*RR0R1RRRRRR*
RRR1RRRRRRRR*
RRRRRRRRR*1R*RRR1R0R0*0
R1RR01*RRRRRR
RR11RRR1R1R**RRRR*1R*RRR
R*RRRRRR0RRRRR00R0RRR...

output:

714451377

result:

ok single line: '714451377'

Test #24:

score: 4
Accepted
time: 18ms
memory: 13628kb

input:

32 1000
RRR0R*R0
RRRRRRRR0RRR*R1R*R00R
RRRRRRRRRRR0RR1RRRRRR1RRRR*RRRRRRR00RR
RRRRR
R0RRRRRRRR1
RRRRRRRRRRR1*R*RRRRRRRR
RR*RR*RRR1RRRRRR
*R*1RR0RRRRRRRRR*R1RRRRRRRRRRR1R10R*R1R
1
RRRR
RR11RRRRRRRR1RRRR1RR1RR
RRRRRRRRRR*RRRR*RRRRR*11RR*RRR1RRR10RR
0R1RR0R1R*RRRR*RRRR*1R0RRRRR*RR
RRRRRRRR
*RRRRRRRRRR0...

output:

426645236

result:

ok single line: '426645236'

Test #25:

score: 4
Accepted
time: 19ms
memory: 13196kb

input:

32 1000
1RR1RRRRRR0RRRRRRRRRR
RR1*RRRR1RRRRR*R
RR*RRRR11R
RRR*0*0RR
R0*RRRRRRRRRR0RR0R
R0RRRRRR1R0RRR1R
RRRRRR*R0RRRR00RRRRR0RRRR1RR1RR
RRR*RR*R0*RRRR0RR0RRRRRRR*R10RRRR
RRRR00*
RRRRRRRRRR*R0RR1RRRR
RRRRRR1RRR1*0R*R0*RRRRRRR0RRR*R
10*RRRRRRRR1RR0RRRRRRR0RR0RRR
RRRR*0R1RR
RRRRRR
RR0R1RRRRR*RRRRRRRRRR...

output:

780564072

result:

ok single line: '780564072'

Extra Test:

score: 0
Extra Test Passed