Submission #1254659

#TimeUsernameProblemLanguageResultExecution timeMemory
1254659Bui_Quoc_CuongPIN (CEOI10_pin)C++20
100 / 100
201 ms9280 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)

pin.cpp: In function 'int main()':
pin.cpp:3:55: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    3 | #define file(task) if(fopen(task".inp", "r")) {freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout);}
      |                                                ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
pin.cpp:60:5: note: in expansion of macro 'file'
   60 |     file("kieuoanh");
      |     ^~~~
pin.cpp:3:88: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    3 | #define file(task) if(fopen(task".inp", "r")) {freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout);}
      |                                                                                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
pin.cpp:60:5: note: in expansion of macro 'file'
   60 |     file("kieuoanh");
      |     ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...