Skip to content

Commit 683a447

Browse files
committed
variable declaration
1 parent b340fab commit 683a447

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

content/5_Plat/PIE.mdx

+14-10
Original file line numberDiff line numberDiff line change
@@ -243,27 +243,29 @@ The following code illustrates this:
243243
const int MOD = 1000003;
244244
245245
int howMany(vector<string> patterns, int k) {
246-
vector<vector<int>> dp(50, vector<int>((1 << (int)patterns.size())));
247-
for (int i = 0; i < (int)patterns[0].size(); i++) {
246+
int n = patterns.size();
247+
int m = patterns[0].size();
248+
vector<vector<int>> dp(50, vector<int>(1 << n));
249+
for (int i = 0; i < m; i++) {
248250
for (char c = 'a'; c <= 'z'; c++) {
249251
int mask = 0;
250-
for (int j = 0; j < (int)patterns.size(); j++) {
252+
for (int j = 0; j < n; j++) {
251253
if (patterns[j][i] == c || patterns[j][i] == '?') { mask |= (1 << j); }
252254
}
253255
if (i == 0) {
254256
dp[i][mask]++;
255257
} else {
256-
for (int j = 0; j < (1 << (int)patterns.size()); j++) {
258+
for (int j = 0; j < (1 << n); j++) {
257259
dp[i][j & mask] = (dp[i][j & mask] + dp[i - 1][j]) % MOD;
258260
}
259261
}
260262
}
261263
}
262264
263265
int ans = 0;
264-
for (int mask = 0; mask < (1 << (int)patterns.size()); mask++) {
266+
for (int mask = 0; mask < (1 << n); mask++) {
265267
if (__builtin_popcount(mask) == k) {
266-
ans = (ans + dp[(int)patterns[0].size() - 1][mask]) % MOD;
268+
ans = (ans + dp[m - 1][mask]) % MOD;
267269
}
268270
}
269271
@@ -304,20 +306,22 @@ $$
304306
const int MOD = 1000003;
305307

306308
int howMany(vector<string> patterns, int k) {
309+
int n = patterns.size();
310+
int m = patterns[0].size();
307311
int ans = 0;
308-
for (int mask = 0; mask < (1 << (int)patterns.size()); mask++) {
312+
for (int mask = 0; mask < (1 << n); mask++) {
309313
// subsets with exactly k patterns matters
310314
if (__builtin_popcount(mask) != k) { continue; }
311315
// iterate over all superset of current subset mask
312-
for (int supermask = mask; supermask < (1 << (int)patterns.size());
316+
for (int supermask = mask; supermask < (1 << n);
313317
supermask++) {
314318
if ((mask & supermask) != mask) { continue; }
315319
int sign = ((__builtin_popcount(supermask) - k) & 1 ? -1 : 1);
316320
int freq = 1; // checks how many valid strings satisfy the supermask
317-
for (int i = 0; i < (int)patterns[0].size(); i++) {
321+
for (int i = 0; i < m; i++) {
318322
bool flag = true;
319323
char last_letter = '?';
320-
for (int j = 0; j < (int)patterns.size(); j++) {
324+
for (int j = 0; j < n; j++) {
321325
if (((1 << j) & supermask) == 0) { continue; }
322326
// check for conflicts if the pattern specifies a letter not '?'
323327
if (patterns[j][i] != '?') {

0 commit comments

Comments
 (0)