Question link: Click the open link
STL + refresh
# Include <cstdio> # include <cstring> # include <algorithm> # include <vector> # include <iostream> # include <set> using namespace STD; # define n 65540 # define ll _ int64ll N; ll a [n] [4], mul [4] = {, 256,4096}; ll H [N]; vector <ll> G [N]; set <ll> myset; set <ll>: iterator P; ll find1 (ll x) {// except x digits, the other three digits are the same as myset. clear (); For (ll I = 0; I <n; I ++) {ll now = 0; For (LL J = 0; j <4; j ++) if (J! = X) Now + = A [I] [J]; G [now]. push_back (I); myset. insert (now);} ll ans = 0; For (P = myset. begin (); P! = Myset. end (); P ++) {ll siz = G [* p]. size (); ans + = (siz * (siz-1)> 1; G [* p]. clear ();} return ans;} ll find2 (ll x, ll y) {myset. clear (); For (ll I = 0; I <n; I ++) {ll now = 0; For (LL J = 0; j <4; j ++) if (J! = X & J! = Y) Now + = A [I] [J]; G [now]. push_back (I); myset. insert (now);} ll ans = 0; For (P = myset. begin (); P! = Myset. end (); P ++) {ll siz = G [* p]. size (); ans + = (siz * (siz-1)> 1; G [* p]. clear ();} return ans;} ll find3 (ll x) {myset. clear (); For (ll I = 0; I <n; I ++) {ll now = 0; now + = A [I] [x]; G [now]. push_back (I); myset. insert (now);} ll ans = 0; For (P = myset. begin (); P! = Myset. end (); P ++) {ll siz = G [* p]. size (); ans + = (siz * (siz-1)> 1; G [* p]. clear ();} return ans;} int main () {ll I, j; For (ll I = 0; I <n; I ++) g [I]. clear (); While (CIN> N) {for (I = 0; I <n; I ++) {char s [10]; scanf ("% s ", s); For (j = 0; j <4; j ++) {A [I] [J] = ('0' <= s [J] & S [J] <= '9 ')? S [J]-'0': s [J]-'A' + 10; A [I] [J] * = Mul [J];} ll ans [5] = {0}; ans [1] = find1 (0) + find1 (1) + find1 (2) + find1 (3 ); ans [2] = find2 () + find2 () + find2 () + find2 () + find2 () + find2 () + find2) -ans [1] * 3; ans [3] = find3 (0) + find3 (1) + find3 (2) + find3 (3) -ans [1] * 3-ans [2] * 2; ll all = (LL) (n * (n-1)/2 ); ans [4] = All-ans [1]-ans [2]-ans [3]; cout <ans [1] <"" <ans [2] <"" <ans [3] <"" <ans [4] <Endl ;} return 0;}/* 4abcdabcaabceabcf10000011112233334444555566667788889999 */