# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1254659 | Bui_Quoc_Cuong | PIN (CEOI10_pin) | C++20 | 201 ms | 9280 KiB |
#include <bits/stdc++.h>
#define TIME (1.0 * clock() / CLOCKS_PER_SEC)
#define file(task) if(fopen(task".inp", "r")) {freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout);}
using namespace std;
const int base = 311;
const int mod = 1e9 + 7;
int n, d;
char a[100005][6];
void init () {
cin >> n >> d;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= 4; j++) {
cin >> a[i][j];
}
}
}
long long dp[(1 << 5) + 5];
int getHash(int id, int mask) {
int sum = 0;
for (int i = 1; i <= 4; i++) if ((mask >> (i - 1)) & 1) {
sum = sum * base % mod;
sum = (sum + (a[id][i] - '0')) % mod;
}
return sum;
}
map <int, int> mp[(1 << 5) + 1];
void process () {
long long ans = 0;
for (int i = 1; i <= n; i++) {
for (int mask = 0; mask < (1 << 4); mask++) {
dp[mask] = mp[mask][getHash(i, mask)];
}
for (int j = 0; j <= 4; j++) {
for (int mask = 0; mask < (1 << 4); mask++) {
if ((mask >> j) & 1) continue;
dp[mask]-= dp[mask ^ (1 << j)];
}
}
for (int mask = 0; mask < (1 << 4); mask++) {
if (__builtin_popcount(mask) != 4 - d) continue;
ans+= dp[mask];
}
for (int mask = 0; mask < (1 << 4); mask++) {
mp[mask][getHash(i, mask)]++;
}
}
cout << ans;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
file("kieuoanh");
int tc = 1;
// cin >> tc;
while (tc--) {
init();
process();
}
cerr << "\n ~ Time Elapsed ~ : " << TIME << "s.\n";
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |