Submission #719727

#TimeUsernameProblemLanguageResultExecution timeMemory
719727pashkaCards (LMIO19_korteles)C++14
100 / 100
456 ms252116 KiB
#include <bits/stdc++.h> #define long long long int #define DEBUG using namespace std; // @author: pashka const int M = 10000000; struct hashmap { long keys[M]; int vals[M]; void clear() { for (int i = 0; i < M; i++) vals[i] = 0; } int hash(long x) { return (x * 239) % M; } int get(long x) { int i = hash(x); while (vals[i] != 0) { if (keys[i] == x) return vals[i]; i++; if (i == M) i = 0; } return 0; } void inc(long x) { int i = hash(x); while (vals[i] != 0) { if (keys[i] == x) { vals[i]++; return; } i++; if (i == M) i = 0; } keys[i] = x; vals[i] = 1; } }; hashmap m1, m2; long calc(vector<string> &a, vector<pair<int, int>> p) { m1.clear(); m2.clear(); long res = 0; for (int i = 0; i < (int) a.size(); i++) { long s1 = 0, s2 = 0; for (auto [x, y]: p) { s1 *= 30; s2 *= 30; s1 += a[i][x] - 'A'; s2 += a[i][y] - 'A'; } res += m2.get(s1); res += m1.get(s2); m1.inc(s1); m2.inc(s2); } cerr << res << "\n"; return res; } char buf[10]; int main() { ios::sync_with_stdio(false); int n; scanf("%d", &n); vector<string> a(n); for (int i = 0; i < n; i++) { string x, y; scanf("%s", buf); x = buf; scanf("%s", buf); y = buf; a[i] = x + y; } long res = 0; res += calc(a, {{0, 2}, {1, 3}}); res += calc(a, {{0, 1}, {2, 3}}); res -= calc(a, {{0, 2}, {1, 3}, {2, 0}, {3, 1}}) / 2; res -= calc(a, {{0, 1}, {2, 3}, {1, 0}, {3, 2}}) / 2; res -= calc(a, {{0, 2}, {1, 3}, {1, 0}, {3, 2}}); res -= calc(a, {{0, 2}, {1, 3}, {0, 1}, {2, 3}}); vector<string> a3; for (string s: a) { if (s[0] == s[3] && s[1] == s[2]) a3.push_back(s); } res += calc(a3, {{0, 2}, {1, 3}}) / 2 * 3; cout << res << "\n"; return 0; }

Compilation message (stderr)

korteles.cpp: In function 'long long int calc(std::vector<std::__cxx11::basic_string<char> >&, std::vector<std::pair<int, int> >)':
korteles.cpp:57:19: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   57 |         for (auto [x, y]: p) {
      |                   ^
korteles.cpp: In function 'int main()':
korteles.cpp:78:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   78 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
korteles.cpp:82:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   82 |         scanf("%s", buf);
      |         ~~~~~^~~~~~~~~~~
korteles.cpp:84:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   84 |         scanf("%s", buf);
      |         ~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...