Submission #476819

# Submission time Handle Problem Language Result Execution time Memory
476819 2021-09-28T15:51:46 Z WeissBlume Languages (IOI10_languages) C++17
Compilation error
0 ms 0 KB
#include"grader.h"
#include"lang.h"
#include<queue>
#include<array>
#include<algorithm>
#include<unordered_map>
#define ALL(X) begin(X),end(X)
using namespace std;
constexpr uint32_t n = 100;
constexpr uint32_t m = 56;
constexpr uint32_t k = 7;

array<unordered_map<uint64_t, uint32_t>, k> kgram;
array<unordered_map<uint64_t, int64_t>, k> fs_kgram;
array<unordered_map<uint64_t, array<uint64_t, m>>, k> f_kgram;

void build_kgram(uint8_t k, int32_t *e) {
	kgram[k].clear();
	auto& counter = kgram[k];
	for (int i = k-1; i < n; i++) {
		__uint128_t h = 0;
		for (int j = k-1; j >= 0; j--)
			h = h << 16 | e[i-j];
		++counter[h % 0X9E3779B97F4A7C15UL];
	}
}

void build(int32_t *e) {
	for (int k: {2, 3, 4, 6}) build_kgram(k, e);
}

void update(auto lang) {
	for (int k = 2; k < ::k; k++) if (not kgram[k].empty()) {
		auto const& grams = kgram[k];
		auto& freqs = f_kgram[k];
		auto& fsums = fs_kgram[k];
		for (auto&[gram, count]: grams) {
			freqs[gram][lang] += 1;
			fsums[gram] += count;
		}
	}
}

auto guess() {
	array<double, m> score {};
	for (int k = 2; k < ::k; k++) if (not kgram[k].empty()) {
		auto const& grams = kgram[k];
		auto const& freqs = f_kgram.at(k);
		auto const& fsums = fs_kgram.at(k);
		for (auto&[gram, count]: grams) if (freqs.count(gram)) {
			auto const& freq = freqs.at(gram);
			auto const& sum = fsums.at(gram);
			for (int i = 0; i < m; i++)
				score[i] += count * (freq[i] / (1. + sum));
		}
	}
	return language(max_element(ALL(score)) - begin(score));
}

void excerpt(int32_t *e) {
	build(e);
	update(guess());
}

Compilation message

lang.cpp:9:11: error: 'uint32_t' does not name a type; did you mean 'u_int32_t'?
    9 | constexpr uint32_t n = 100;
      |           ^~~~~~~~
      |           u_int32_t
lang.cpp:10:11: error: 'uint32_t' does not name a type; did you mean 'u_int32_t'?
   10 | constexpr uint32_t m = 56;
      |           ^~~~~~~~
      |           u_int32_t
lang.cpp:11:11: error: 'uint32_t' does not name a type; did you mean 'u_int32_t'?
   11 | constexpr uint32_t k = 7;
      |           ^~~~~~~~
      |           u_int32_t
lang.cpp:13:21: error: 'uint64_t' was not declared in this scope; did you mean 'u_int64_t'?
   13 | array<unordered_map<uint64_t, uint32_t>, k> kgram;
      |                     ^~~~~~~~
      |                     u_int64_t
lang.cpp:13:31: error: 'uint32_t' was not declared in this scope; did you mean 'u_int32_t'?
   13 | array<unordered_map<uint64_t, uint32_t>, k> kgram;
      |                               ^~~~~~~~
      |                               u_int32_t
lang.cpp:13:39: error: template argument 1 is invalid
   13 | array<unordered_map<uint64_t, uint32_t>, k> kgram;
      |                                       ^
lang.cpp:13:39: error: template argument 2 is invalid
lang.cpp:13:39: error: template argument 3 is invalid
lang.cpp:13:39: error: template argument 4 is invalid
lang.cpp:13:39: error: template argument 5 is invalid
lang.cpp:13:42: error: 'k' was not declared in this scope
   13 | array<unordered_map<uint64_t, uint32_t>, k> kgram;
      |                                          ^
lang.cpp:13:43: error: template argument 1 is invalid
   13 | array<unordered_map<uint64_t, uint32_t>, k> kgram;
      |                                           ^
lang.cpp:13:43: error: template argument 2 is invalid
lang.cpp:14:21: error: 'uint64_t' was not declared in this scope; did you mean 'u_int64_t'?
   14 | array<unordered_map<uint64_t, int64_t>, k> fs_kgram;
      |                     ^~~~~~~~
      |                     u_int64_t
lang.cpp:14:38: error: template argument 1 is invalid
   14 | array<unordered_map<uint64_t, int64_t>, k> fs_kgram;
      |                                      ^
lang.cpp:14:38: error: template argument 3 is invalid
lang.cpp:14:38: error: template argument 4 is invalid
lang.cpp:14:38: error: template argument 5 is invalid
lang.cpp:14:41: error: 'k' was not declared in this scope
   14 | array<unordered_map<uint64_t, int64_t>, k> fs_kgram;
      |                                         ^
lang.cpp:14:42: error: template argument 1 is invalid
   14 | array<unordered_map<uint64_t, int64_t>, k> fs_kgram;
      |                                          ^
lang.cpp:14:42: error: template argument 2 is invalid
lang.cpp:15:21: error: 'uint64_t' was not declared in this scope; did you mean 'u_int64_t'?
   15 | array<unordered_map<uint64_t, array<uint64_t, m>>, k> f_kgram;
      |                     ^~~~~~~~
      |                     u_int64_t
lang.cpp:15:37: error: 'uint64_t' was not declared in this scope; did you mean 'u_int64_t'?
   15 | array<unordered_map<uint64_t, array<uint64_t, m>>, k> f_kgram;
      |                                     ^~~~~~~~
      |                                     u_int64_t
lang.cpp:15:47: error: 'm' was not declared in this scope
   15 | array<unordered_map<uint64_t, array<uint64_t, m>>, k> f_kgram;
      |                                               ^
lang.cpp:15:47: error: template argument 1 is invalid
lang.cpp:15:47: error: template argument 2 is invalid
lang.cpp:15:48: error: template argument 1 is invalid
   15 | array<unordered_map<uint64_t, array<uint64_t, m>>, k> f_kgram;
      |                                                ^~
lang.cpp:15:48: error: template argument 2 is invalid
lang.cpp:15:48: error: template argument 3 is invalid
lang.cpp:15:48: error: template argument 4 is invalid
lang.cpp:15:48: error: template argument 5 is invalid
lang.cpp:15:52: error: 'k' was not declared in this scope
   15 | array<unordered_map<uint64_t, array<uint64_t, m>>, k> f_kgram;
      |                                                    ^
lang.cpp:15:53: error: template argument 1 is invalid
   15 | array<unordered_map<uint64_t, array<uint64_t, m>>, k> f_kgram;
      |                                                     ^
lang.cpp:15:53: error: template argument 2 is invalid
lang.cpp:17:6: error: variable or field 'build_kgram' declared void
   17 | void build_kgram(uint8_t k, int32_t *e) {
      |      ^~~~~~~~~~~
lang.cpp:17:18: error: 'uint8_t' was not declared in this scope; did you mean 'u_int8_t'?
   17 | void build_kgram(uint8_t k, int32_t *e) {
      |                  ^~~~~~~
      |                  u_int8_t
lang.cpp:17:37: error: expected primary-expression before '*' token
   17 | void build_kgram(uint8_t k, int32_t *e) {
      |                                     ^
lang.cpp:17:38: error: 'e' was not declared in this scope
   17 | void build_kgram(uint8_t k, int32_t *e) {
      |                                      ^
lang.cpp: In function 'void build(int32_t*)':
lang.cpp:29:28: error: 'build_kgram' was not declared in this scope
   29 |  for (int k: {2, 3, 4, 6}) build_kgram(k, e);
      |                            ^~~~~~~~~~~
lang.cpp: At global scope:
lang.cpp:32:13: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   32 | void update(auto lang) {
      |             ^~~~
lang.cpp: In function 'void update(auto:1)':
lang.cpp:33:24: error: '::k' has not been declared
   33 |  for (int k = 2; k < ::k; k++) if (not kgram[k].empty()) {
      |                        ^
lang.cpp:33:45: error: invalid types 'int[int]' for array subscript
   33 |  for (int k = 2; k < ::k; k++) if (not kgram[k].empty()) {
      |                                             ^
lang.cpp:34:28: error: invalid types 'int[int]' for array subscript
   34 |   auto const& grams = kgram[k];
      |                            ^
lang.cpp:35:24: error: invalid types 'int[int]' for array subscript
   35 |   auto& freqs = f_kgram[k];
      |                        ^
lang.cpp:36:25: error: invalid types 'int[int]' for array subscript
   36 |   auto& fsums = fs_kgram[k];
      |                         ^
lang.cpp: In function 'auto guess()':
lang.cpp:45:16: error: 'm' was not declared in this scope
   45 |  array<double, m> score {};
      |                ^
lang.cpp:45:17: error: template argument 2 is invalid
   45 |  array<double, m> score {};
      |                 ^
lang.cpp:46:24: error: '::k' has not been declared
   46 |  for (int k = 2; k < ::k; k++) if (not kgram[k].empty()) {
      |                        ^
lang.cpp:46:45: error: invalid types 'int[int]' for array subscript
   46 |  for (int k = 2; k < ::k; k++) if (not kgram[k].empty()) {
      |                                             ^
lang.cpp:47:28: error: invalid types 'int[int]' for array subscript
   47 |   auto const& grams = kgram[k];
      |                            ^
lang.cpp:48:31: error: request for member 'at' in 'f_kgram', which is of non-class type 'int'
   48 |   auto const& freqs = f_kgram.at(k);
      |                               ^~
lang.cpp:49:32: error: request for member 'at' in 'fs_kgram', which is of non-class type 'int'
   49 |   auto const& fsums = fs_kgram.at(k);
      |                                ^~
lang.cpp:54:10: error: invalid types 'int[int]' for array subscript
   54 |     score[i] += count * (freq[i] / (1. + sum));
      |          ^
lang.cpp:7:23: error: no matching function for call to 'begin(int&)'
    7 | #define ALL(X) begin(X),end(X)
      |                       ^
lang.cpp:57:30: note: in expansion of macro 'ALL'
   57 |  return language(max_element(ALL(score)) - begin(score));
      |                              ^~~
In file included from /usr/include/c++/10/bits/stl_deque.h:63,
                 from /usr/include/c++/10/deque:67,
                 from /usr/include/c++/10/queue:60,
                 from lang.cpp:3:
/usr/include/c++/10/initializer_list:90:5: note: candidate: 'template<class _Tp> constexpr const _Tp* std::begin(std::initializer_list<_Tp>)'
   90 |     begin(initializer_list<_Tp> __ils) noexcept
      |     ^~~~~
/usr/include/c++/10/initializer_list:90:5: note:   template argument deduction/substitution failed:
lang.cpp:7:23: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
    7 | #define ALL(X) begin(X),end(X)
      |                       ^
lang.cpp:57:30: note: in expansion of macro 'ALL'
   57 |  return language(max_element(ALL(score)) - begin(score));
      |                              ^~~
In file included from /usr/include/c++/10/deque:68,
                 from /usr/include/c++/10/queue:60,
                 from lang.cpp:3:
/usr/include/c++/10/bits/range_access.h:51:5: note: candidate: 'template<class _Container> constexpr decltype (__cont.begin()) std::begin(_Container&)'
   51 |     begin(_Container& __cont) -> decltype(__cont.begin())
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:51:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> constexpr decltype (__cont.begin()) std::begin(_Container&) [with _Container = int]':
lang.cpp:57:30:   required from here
/usr/include/c++/10/bits/range_access.h:51:50: error: request for member 'begin' in '__cont', which is of non-class type 'int'
   51 |     begin(_Container& __cont) -> decltype(__cont.begin())
      |                                           ~~~~~~~^~~~~
/usr/include/c++/10/bits/range_access.h:61:5: note: candidate: 'template<class _Container> constexpr decltype (__cont.begin()) std::begin(const _Container&)'
   61 |     begin(const _Container& __cont) -> decltype(__cont.begin())
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:61:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> constexpr decltype (__cont.begin()) std::begin(const _Container&) [with _Container = int]':
lang.cpp:57:30:   required from here
/usr/include/c++/10/bits/range_access.h:61:56: error: request for member 'begin' in '__cont', which is of non-class type 'const int'
   61 |     begin(const _Container& __cont) -> decltype(__cont.begin())
      |                                                 ~~~~~~~^~~~~
/usr/include/c++/10/bits/range_access.h:90:5: note: candidate: 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::begin(_Tp (&)[_Nm])'
   90 |     begin(_Tp (&__arr)[_Nm])
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:90:5: note:   template argument deduction/substitution failed:
lang.cpp:7:23: note:   mismatched types '_Tp [_Nm]' and 'int'
    7 | #define ALL(X) begin(X),end(X)
      |                       ^
lang.cpp:57:30: note: in expansion of macro 'ALL'
   57 |  return language(max_element(ALL(score)) - begin(score));
      |                              ^~~
In file included from /usr/include/c++/10/deque:68,
                 from /usr/include/c++/10/queue:60,
                 from lang.cpp:3:
/usr/include/c++/10/bits/range_access.h:107:31: note: candidate: 'template<class _Tp> _Tp* std::begin(std::valarray<_Tp>&)'
  107 |   template<typename _Tp> _Tp* begin(valarray<_Tp>&);
      |                               ^~~~~
/usr/include/c++/10/bits/range_access.h:107:31: note:   template argument deduction/substitution failed:
lang.cpp:7:23: note:   mismatched types 'std::valarray<_Tp>' and 'int'
    7 | #define ALL(X) begin(X),end(X)
      |                       ^
lang.cpp:57:30: note: in expansion of macro 'ALL'
   57 |  return language(max_element(ALL(score)) - begin(score));
      |                              ^~~
In file included from /usr/include/c++/10/deque:68,
                 from /usr/include/c++/10/queue:60,
                 from lang.cpp:3:
/usr/include/c++/10/bits/range_access.h:108:37: note: candidate: 'template<class _Tp> const _Tp* std::begin(const std::valarray<_Tp>&)'
  108 |   template<typename _Tp> const _Tp* begin(const valarray<_Tp>&);
      |                                     ^~~~~
/usr/include/c++/10/bits/range_access.h:108:37: note:   template argument deduction/substitution failed:
lang.cpp:7:23: note:   mismatched types 'const std::valarray<_Tp>' and 'int'
    7 | #define ALL(X) begin(X),end(X)
      |                       ^
lang.cpp:57:30: note: in expansion of macro 'ALL'
   57 |  return language(max_element(ALL(score)) - begin(score));
      |                              ^~~
lang.cpp:7:30: error: no matching function for call to 'end(int&)'
    7 | #define ALL(X) begin(X),end(X)
      |                              ^
lang.cpp:57:30: note: in expansion of macro 'ALL'
   57 |  return language(max_element(ALL(score)) - begin(score));
      |                              ^~~
In file included from /usr/include/c++/10/bits/stl_deque.h:63,
                 from /usr/include/c++/10/deque:67,
                 from /usr/include/c++/10/queue:60,
                 from lang.cpp:3:
/usr/include/c++/10/initializer_list:101:5: note: candidate: 'template<class _Tp> constexpr const _Tp* std::end(std::initializer_list<_Tp>)'
  101 |     end(initializer_list<_Tp> __ils) noexcept
      |     ^~~
/usr/include/c++/10/initializer_list:101:5: note:   template argument deduction/substitution failed:
lang.cpp:7:30: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
    7 | #define ALL(X) begin(X),end(X)
      |                              ^
lang.cpp:57:30: note: in expansion of macro 'ALL'
   57 |  return language(max_element(ALL(score)) - begin(score));
      |                              ^~~
In file included from /usr/include/c++/10/deque:68,
                 from /usr/include/c++/10/queue:60,
                 from lang.cpp:3:
/usr/include/c++/10/bits/range_access.h:71:5: note: candidate: 'template<class _Container> constexpr decltype (__cont.end()) std::end(_Container&)'
   71 |     end(_Container& __cont) -> decltype(__cont.end())
      |     ^~~
/usr/include/c++/10/bits/range_access.h:71:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> constexpr decltype (__cont.end()) std::end(_Container&) [with _Container = int]':
lang.cpp:57:30:   required from here
/usr/include/c++/10/bits/range_access.h:71:48: error: request for member 'end' in '__cont', which is of non-class type 'int'
   71 |     end(_Container& __cont) -> decltype(__cont.end())
      |                                         ~~~~~~~^~~
/usr/include/c++/10/bits/range_access.h:81:5: note: candidate: 'template<class _Container> constexpr decltype (__cont.end()) std::end(const _Container&)'
   81 |     end(const _Container& __cont) -> decltype(__cont.end())
      |     ^~~
/usr/include/c++/10/bits/range_access.h:81:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> constexpr decltype (__cont.end()) std::end(const _Container&) [with _Container = int]':
lang.cpp:57:30:   required from here
/usr/include/c++/10/bits/range_access.h:81:54: error: request for member 'end' in '__cont', which is of non-class type 'const int'
   81 |     end(const _Container& __cont) -> decltype(__cont.end())
      |                                               ~~~~~~~^~~
/usr/include/c++/10/bits/range_access.h:100:5: note: candidate: 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::end(_Tp (&)[_Nm])'
  100 |     end(_Tp (&__arr)[_Nm])
      |     ^~~
/usr/include/c++/10/bits/range_access.h:100:5: note:   template argument deduction/substitution failed:
lang.cpp:7:30: note:   mismatched types '_Tp [_Nm]' and 'int'
    7 | #define ALL(X) begin(X),end(X)
      |                              ^
lang.cpp:57:30: note: in expansion of macro 'ALL'
   57 |  return language(max_element(ALL(score)) - begin(score));
      |                              ^~~
In file included from /usr/include/c++/10/deque:68,
                 from /usr/include/c++/10/queue:60,
                 from lang.cpp:3:
/usr/include/c++/10/bits/range_access.h:109:31: note: candidate: 'template<class _Tp> _Tp* std::end(std::valarray<_Tp>&)'
  109 |   template<typename _Tp> _Tp* end(valarray<_Tp>&);
      |                               ^~~
/usr/include/c++/10/bits/range_access.h:109:31: note:   template argument deduction/substitution failed:
lang.cpp:7:30: note:   mismatched types 'std::valarray<_Tp>' and 'int'
    7 | #define ALL(X) begin(X),end(X)
      |                              ^
lang.cpp:57:30: note: in expansion of macro 'ALL'
   57 |  return language(max_element(ALL(score)) - begin(score));
      |                              ^~~
In file included from /usr/include/c++/10/deque:68,
                 from /usr/include/c++/10/queue:60,
                 from lang.cpp:3:
/usr/include/c++/10/bits/range_access.h:110:37: note: candidate: 'template<class _Tp> const _Tp* std::end(const std::valarray<_Tp>&)'
  110 |   template<typename _Tp> const _Tp* end(const valarray<_Tp>&);
      |                                     ^~~
/usr/include/c++/10/bits/range_access.h:110: