結果
問題 | No.1169 Row and Column and Diagonal |
ユーザー |
![]() |
提出日時 | 2020-08-14 21:33:53 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 22 ms / 2,000 ms |
コード長 | 6,366 bytes |
コンパイル時間 | 1,358 ms |
コンパイル使用メモリ | 89,288 KB |
最終ジャッジ日時 | 2025-01-12 23:22:00 |
ジャッジサーバーID (参考情報) |
judge4 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 13 |
ソースコード
#line 1 "B.cpp"#include <cstdio>#include <algorithm>#line 1 "~/git/library/utility/io.cpp"/*** @brief 入出力* @author えびちゃん*/#include <cstddef>#include <cctype>#include <iomanip>#include <iostream>#include <tuple>#include <utility>class format {public:using size_type = size_t;private:char const* M_fmt;size_type M_nvars = 0;size_type M_error = -1;void M_print(std::ostream& os, char const* pos) const {while (*pos) {if (*pos == '{' || *pos == '}') ++pos;os << *pos++;}}template <typename Tp, typename... Args>void M_print(std::ostream& os, char const* pos, Tp const& x, Args const&... xs) const {while (true) {if (*pos == '{') {if (pos[1] == '{') {++pos;os << '{';} else {char const* next = M_print_formatted(os, pos, x);return M_print(os, next, xs...);}} else {if (*pos == '}') ++pos;os << *pos;}++pos;}char const* next = M_print_formatted(os, pos, x);M_print(os, next, xs...);}template <typename Tp>char const* M_print_formatted(std::ostream& os, char const* pos, Tp const& x) const {// parse flags, preferablywhile (*++pos != '}') {}os << x;return ++pos;}void M_scan(std::istream& is, char const* pos) const {while (true) {if (*pos == '{' || *pos == '}') ++pos;if (isspace(*pos)) {while (isspace(is.peek())) is.get();} else {if (is.peek() == *pos) {++pos;is.get();} else {return;}}}}template <typename Tp, typename... Args>void M_scan(std::istream& is, char const* pos, Tp& x, Args&&... xs) const {while (true) {if (*pos == '{') {if (pos[1] == '{') {if (is.peek() == '{') {++pos;is.get();} else {return;}} else {char const* next = M_scan_formatted(is, pos, x);return M_scan(is, next, xs...);}} else if (isspace(*pos)) {while (isspace(is.peek())) is.get();++pos;} else {if (*pos == '}') ++pos;if (is.peek() == *pos) {++pos;is.get();} else {return;}}}}template <typename Tp>char const* M_scan_formatted(std::istream& is, char const* pos, Tp& x) const {// parse flags, preferablywhile (*++pos != '}') {}is >> x;return ++pos;}public:constexpr format(char const* fmt): M_fmt(fmt) {bool opens = 0;size_type i = 0;for (; fmt[i]; ++i) {if (fmt[i] == '{') {if (fmt[i+1] == '{') { ++i; continue; } // escapedif (opens) { M_error = i; return; }opens = true;} else if (fmt[i] == '}') {if (fmt[i+1] == '}') { ++i; continue; } // escapedif (!opens) { M_error = i; return; }opens = false;++M_nvars;}}if (opens) { M_error = i; return; }}template <typename... Args>void print_(std::ostream& os, Args const&... xs) const {M_print(os, M_fmt, xs...);}template <typename... Args>void scan_(std::istream& is, Args&&... xs) const {M_scan(is, M_fmt, xs...);}constexpr size_type count() const { return M_nvars; }constexpr size_type error() const { return M_error; }};#define VA_COUNT(...) \std::tuple_size<decltype(std::make_tuple(__VA_ARGS__))>::value#define fprint(os, fmt, ...) (void)({ \constexpr format fmt_(fmt); \constexpr size_t lhs = fmt_.count(); \constexpr size_t rhs = VA_COUNT(__VA_ARGS__); \static_assert(lhs == rhs, "size mismatch"); \static_assert(fmt_.error()+1 == 0, "misformatted"); \fmt_.print_(os, ##__VA_ARGS__); \})#define fprintln(os, fmt, ...) (void)({ \fprint(os, fmt, ##__VA_ARGS__); \os << '\n';; \})#define print(...) fprint(std::cout, ##__VA_ARGS__)#define println(...) fprintln(std::cout, ##__VA_ARGS__)#define eprint(...) fprint(std::cerr, ##__VA_ARGS__)#define eprintln(...) fprintln(std::cerr, ##__VA_ARGS__)#define fscan(is, fmt, ...) (void)({ \constexpr format fmt_(fmt); \constexpr size_t lhs = fmt_.count(); \constexpr size_t rhs = VA_COUNT(__VA_ARGS__); \static_assert(lhs == rhs, "size mismatch"); \static_assert(fmt_.error()+1 == 0, "misformatted"); \fmt_.scan_(is, ##__VA_ARGS__); \})#define scan(...) fscan(std::cin, __VA_ARGS__)__attribute__((constructor))void ioinit() {std::ios_base::sync_with_stdio(false);std::cin.tie(nullptr);std::cerr.tie(nullptr);std::cout << std::fixed << std::setprecision(16);}#line 1 "~/git/library/utility/make/vector.cpp"/*** @brief 多次元 vector の作成* @author えびちゃん*/#line 10 "~/git/library/utility/make/vector.cpp"#include <type_traits>#include <vector>namespace detail {template <typename Tp, size_t Nb>auto make_vector(std::vector<size_t>& sizes, Tp const& x) {if constexpr (Nb == 1) {return std::vector(sizes[0], x);} else {size_t size = sizes[Nb-1];sizes.pop_back();return std::vector(size, make_vector<Tp, Nb-1>(sizes, x));}}} // detail::template <typename Tp, size_t Nb>auto make_vector(size_t const(&sizes)[Nb], Tp const& x = Tp()) {std::vector<size_t> s(Nb);for (size_t i = 0; i < Nb; ++i) s[i] = sizes[Nb-i-1];return detail::make_vector<Tp, Nb>(s, x);}#line 6 "B.cpp"int main() {size_t n;scan("{}", n);auto res = make_vector({n, n}, 0);res[0][0] = 1;for (size_t i = 1; i < n; ++i) res[0][i] = n-i+1;for (size_t i = 1; i < n; ++i) {res[i] = res[i-1];std::rotate(res[i].begin(), res[i].begin()+(n-2), res[i].end());}for (size_t i = 0; i < n; ++i)for (size_t j = 0; j < n; ++j)print("{}{}", res[i][j], j+1<n? ' ': '\n');}