E rand过去了, 这真的合理吗

#include <bits/stdc++.h>


#if __cplusplus >= 202002L
namespace stdv = std::views;
namespace stdr = std::ranges;
#endif


template <typename T> constexpr auto enumerate(const T& vec) { std::vector<std::pair<int, typename T::value_type>> result(vec.size());for (int i = 0; i < vec.size(); i++) { result[i] = std::pair(i, vec[i]); } return result; }
template <typename P, typename Q> constexpr std::istream& operator>>(std::istream& is, std::pair<P, Q>& v) { is >> v.first >> v.second; return is; }
template <typename P, typename Q> constexpr std::ostream& operator<<(std::ostream& os, const std::pair<P, Q>& v) { os << v.first << ' ' << v.second; return os; }
template <typename ...Args> constexpr std::istream& operator>>(std::istream& is, std::tuple<Args...>& v) { std::apply([&is](auto&... args) {((is >> args), ...);}, v); return is; }
template <typename ...Args> constexpr std::ostream& operator<<(std::ostream& os, const std::tuple<Args...>& v) { std::apply([&os](auto&&... args) {((os << args << ' '), ...);}, v); return os; }
template <typename T, std::size_t N> constexpr std::istream& operator>>(std::istream& is, std::array<T, N>& v) { for (auto& i : v) is >> i; return is; }
template <typename T, std::size_t N> constexpr std::ostream& operator<<(std::ostream& os, const std::array<T, N>& v) { for (int i = 0; i < v.size(); i++) os << v[i] << (std::is_class_v<T> ? "\n" : i + 1 != v.size() ? " " : ""); return os; }
template <typename T> constexpr std::istream& operator>>(std::istream& is, std::vector<T>& v) { for (auto& i : v) is >> i; return is; }
template <typename T> constexpr std::ostream& operator<<(std::ostream& os, const std::vector<T>& v) { for (int i = 0; i < v.size(); i++) { os << v[i] << (std::is_class_v<T> ? "\n" : i + 1 != v.size() ? " " : ""); } return os; }
template <typename...Args> constexpr void print(Args&&...args) { ((std::cout << args << ' '), ...); }
template <typename...Args> constexpr void debug(Args&&...args) { ((std::cerr << args << ' '), ...); std::cerr << '\n'; }
template <typename...Args> constexpr void println(Args&&...args) { ((std::cout << args << ' '), ...); std::cout << '\n'; }
template <typename P, typename Q> constexpr bool chmax(P& a, Q b) { a = (b > a ? b : a); return a == b; }
template <typename P, typename Q> constexpr bool chmin(P& a, Q b) { a = (b < a ? b : a); return a == b; }
template <typename T> static constexpr T inf = std::numeric_limits<T>::max() / 2;
template <typename T> constexpr void discretize(std::vector<T>& v) { std::sort(v.begin(), v.end()); v.erase(std::unique(v.begin(), v.end()), v.end()); }


using i64 = int64_t;


std::mt19937 rnd(std::chrono::steady_clock::now().time_since_epoch().count());


constexpr int N = 1000;


char s[N][N];
int dis[N][N];


std::pair<int, int> dir[] = { {-1, 0}, {0, 1}, {1, 0}, {0, -1} };


int main() {
    std::cin.tie(nullptr);
    std::ios::sync_with_stdio(false);


    int n, m;
    std::cin >> n >> m;


    auto check = [&]() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                dis[i][j] = -1;
            }
        }
        dis[0][0] = 0;
        std::queue<std::pair<int, int>> q;
        q.emplace(0, 0);
        while (!q.empty()) {
            auto [x, y] = q.front();
            q.pop();


            for (auto [dx, dy] : dir) {
                int u = x + dx;
                int v = y + dy;
                if (u < 0 || u >= n || v < 0 || v >= m || dis[u][v] != -1 || s[x][y] == s[u][v]) {
                    continue;
                }
                dis[u][v] = dis[x][y] + 1;
                q.emplace(u, v);
            }
        }
        int t = dis[n - 1][m - 1];
        return t != -1 && t != n * m - 1 && t != n + m - 2;
    };


    const int P = std::abs(n - m) >= 700 ? 10 : 3;
    do {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                s[i][j] = char(rnd() % P + 'a');
            }
        }
    } while (!check());


    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            std::cout << s[i][j];
        }
        std::cout << "\n";
    }


    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 13:40
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
给我发了笔试链接,想着等晚上回去做,结果还没做流程就终止了
伟大的小黄鸭在学习:我猜就是笔试几乎没用,就是用来给用人部门拖时间复筛简历的,可能用人部门筛到你简历觉得不合适就提前挂了
投递小鹏汽车等公司10个岗位
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务