QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#81141 | #5523. Graph Problem With Small $n$ | semiexp | Compile Error | / | / | C++14 | 5.0kb | 2023-02-25 13:46:07 | 2023-02-25 13:46:16 |
Judging History
你现在查看的是最新测评结果
- [2023-08-10 23:21:45]
- System Update: QOJ starts to keep a history of the judgings of all the submissions.
- [2023-02-25 13:46:16]
- 评测
- 测评结果:Compile Error
- 用时:0ms
- 内存:0kb
- [2023-02-25 13:46:07]
- 提交
answer
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std;
#define MOD 998244353
#define ADD(X,Y) ((X) = ((X) + (Y)%MOD) % MOD)
typedef long long i64; typedef vector<int> ivec; typedef vector<string> svec;
using i32 = int;
using u32 = unsigned int;
using i64 = long long;
using u64 = unsigned long long;
template <u32 Mod> class ModInt {
using Self = ModInt<Mod>;
static_assert(Mod <= std::numeric_limits<i32>::max());
public:
ModInt(i64 value = 0) {
if (value < 0) {
value_ = (Mod - (-value % Mod)) % Mod;
} else {
value_ = value % Mod;
}
}
ModInt(const Self& other) : value_(other.value_) {}
operator i32() const {
return value_;
}
operator i64() const {
return value_;
}
Self operator+(const Self& other) const {
Self res(*this);
res += other;
return res;
}
Self operator-(const Self& other) const {
Self res(*this);
res -= other;
return res;
}
Self operator*(const Self& other) const {
Self res(*this);
res *= other;
return res;
}
Self operator/(const Self& other) const {
Self res(*this);
res /= other;
return res;
}
Self operator-() const {
Self res(0);
res -= *this;
return res;
}
Self pow(i64 power) const {
Self ret(1), p(*this);
if (power < 0) {
power *= -1;
p = p.inv();
}
for (i64 i = 0; (1 << i) <= power; ++i) {
if ((power >> i) & 1) ret *= p;
p *= p;
}
return ret;
}
Self& operator+=(const Self& other) {
value_ += other.value_;
if (value_ >= Mod) value_ -= Mod;
return *this;
}
Self& operator-=(const Self& other) {
value_ += Mod - other.value_;
if (value_ >= Mod) value_ -= Mod;
return *this;
}
Self& operator*=(const Self& other) {
value_ = (u32)(((u64)value_ * other.value_) % Mod);
return *this;
}
Self& operator/=(const Self& other) {
*this *= other.inv();
return *this;
}
Self inv() const {
if (value_ < inv_tbl_.size()) return inv_tbl_[value_];
if (Mod - value_ < inv_tbl_.size()) return Mod - inv_tbl_[Mod - value_];
else return pow(Mod - 2);
}
private:
u32 value_;
static const std::vector<Self> inv_tbl_;
};
template <u32 Mod>
std::vector<ModInt<Mod>> create_inv_tbl_(u32 n) {
std::vector<ModInt<Mod>> res;
res.reserve(n + 1);
res.push_back(0);
res.push_back(1);
for (u32 i = 2; i <= n; ++i) {
// MOD / i == 0
// MOD // i + (MOD % i) / i == 0
// 1 / i == -(MOD // i) / (MOD % i)
res.push_back(res[Mod % i] * ModInt<Mod>(Mod - (Mod / i)));
}
return res;
}
template <u32 Mod>
const std::vector<ModInt<Mod>> ModInt<Mod>::inv_tbl_ = create_inv_tbl_<Mod>(1000000);
template <class T, u32 Mod>
ModInt<Mod> operator+(T x, ModInt<Mod> y) {
return ModInt<Mod>(x) + y;
}
template <class T, u32 Mod>
ModInt<Mod> operator-(T x, ModInt<Mod> y) {
return ModInt<Mod>(x) - y;
}
template <class T, u32 Mod>
ModInt<Mod> operator*(T x, ModInt<Mod> y) {
return ModInt<Mod>(x) * y;
}
template <class T, u32 Mod>
ModInt<Mod> operator/(T x, ModInt<Mod> y) {
return ModInt<Mod>(x) / y;
}
template <class T, u32 Mod>
ModInt<Mod> operator+(ModInt<Mod> x, T y) {
return x + ModInt<Mod>(y);
}
template <class T, u32 Mod>
ModInt<Mod> operator-(ModInt<Mod> x, T y) {
return x - ModInt<Mod>(y);
}
template <class T, u32 Mod>
ModInt<Mod> operator*(ModInt<Mod> x, T y) {
return x * ModInt<Mod>(y);
}
template <class T, u32 Mod>
ModInt<Mod> operator/(ModInt<Mod> x, T y) {
return x / ModInt<Mod>(y);
}
typedef ModInt<MOD> mint;
int N;
char buf[30];
int adj[24];
int dp[1 << 24];
int ans[24];
int main()
{
scanf("%d", &N);
for (int i = 0; i < N; ++i) {
scanf("%s", buf);
adj[i] = 0;
for (int j = 0; j < N; ++j) {
if (buf[j] == '1') adj[i] |= 1 << j;
}
}
fill(dp, dp + (1 << N), 0);
dp[1] = 1;
for (int i = 1; i < (1 << N); ++i) {
for (int j = 0; j < N; ++j) if (((i >> j) & 1) == 0) {
if (dp[i] & adj[j]) dp[i | (1 << j)] |= 1 << j;
}
}
fill(ans, ans + N, 0);
for (int p = 0; p < (1 << N); ++p) {
int q = ((1 << N) - 2) ^ p;
for (int i = 0; i < N; ++i) if ((dp[p] >> i) & 1) {
ans[i] |= dp[q];
}
}
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
bool ok = i != j && ((ans[i] >> j) & 1);
printf("%c", ok ? '1' : '0');
}
puts("");
}
return 0;
}
Details
answer.code:24:31: error: ‘numeric_limits’ is not a member of ‘std’ 24 | static_assert(Mod <= std::numeric_limits<i32>::max()); | ^~~~~~~~~~~~~~ answer.code:24:49: error: expected primary-expression before ‘>’ token 24 | static_assert(Mod <= std::numeric_limits<i32>::max()); | ^ answer.code:24:55: error: no matching function for call to ‘max()’ 24 | static_assert(Mod <= std::numeric_limits<i32>::max()); | ~~~~~^~ In file included from /usr/include/c++/11/bits/char_traits.h:39, from /usr/include/c++/11/ios:40, from /usr/include/c++/11/ostream:38, from /usr/include/c++/11/iostream:39, from answer.code:4: /usr/include/c++/11/bits/stl_algobase.h:254:5: note: candidate: ‘template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)’ 254 | max(const _Tp& __a, const _Tp& __b) | ^~~ /usr/include/c++/11/bits/stl_algobase.h:254:5: note: template argument deduction/substitution failed: answer.code:24:55: note: candidate expects 2 arguments, 0 provided 24 | static_assert(Mod <= std::numeric_limits<i32>::max()); | ~~~~~^~ In file included from /usr/include/c++/11/bits/char_traits.h:39, from /usr/include/c++/11/ios:40, from /usr/include/c++/11/ostream:38, from /usr/include/c++/11/iostream:39, from answer.code:4: /usr/include/c++/11/bits/stl_algobase.h:300:5: note: candidate: ‘template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)’ 300 | max(const _Tp& __a, const _Tp& __b, _Compare __comp) | ^~~ /usr/include/c++/11/bits/stl_algobase.h:300:5: note: template argument deduction/substitution failed: answer.code:24:55: note: candidate expects 3 arguments, 0 provided 24 | static_assert(Mod <= std::numeric_limits<i32>::max()); | ~~~~~^~ In file included from /usr/include/c++/11/algorithm:62, from answer.code:7: /usr/include/c++/11/bits/stl_algo.h:3461:5: note: candidate: ‘template<class _Tp> constexpr _Tp std::max(std::initializer_list<_Tp>)’ 3461 | max(initializer_list<_Tp> __l) | ^~~ /usr/include/c++/11/bits/stl_algo.h:3461:5: note: template argument deduction/substitution failed: answer.code:24:55: note: candidate expects 1 argument, 0 provided 24 | static_assert(Mod <= std::numeric_limits<i32>::max()); | ~~~~~^~ In file included from /usr/include/c++/11/algorithm:62, from answer.code:7: /usr/include/c++/11/bits/stl_algo.h:3467:5: note: candidate: ‘template<class _Tp, class _Compare> constexpr _Tp std::max(std::initializer_list<_Tp>, _Compare)’ 3467 | max(initializer_list<_Tp> __l, _Compare __comp) | ^~~ /usr/include/c++/11/bits/stl_algo.h:3467:5: note: template argument deduction/substitution failed: answer.code:24:55: note: candidate expects 2 arguments, 0 provided 24 | static_assert(Mod <= std::numeric_limits<i32>::max()); | ~~~~~^~ answer.code: In function ‘int main()’: answer.code:188:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 188 | scanf("%d", &N); | ~~~~~^~~~~~~~~~ answer.code:190:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 190 | scanf("%s", buf); | ~~~~~^~~~~~~~~~~