博客
关于我
luogu P7262 Get Your Wish
阅读量:637 次
发布时间:2019-03-14

本文共 2702 字,大约阅读时间需要 9 分钟。

为了解决这个问题,我们需要模拟话筒内部水滴在新的重力方向下的流动情况。我们需要检查是否有水滴会流到关键电子元件上,如果有的话,话筒就会坏掉。

方法思路

  • 读取输入数据:首先读取话筒的大小和重力方向,然后读取话筒内部的状态矩阵。
  • 记录水滴位置:遍历状态矩阵,记录所有水滴的位置。
  • 模拟水滴流动:根据重力方向,模拟每个水滴的流动路径,检查是否会流到关键电子元件上。
  • 判断结果:如果有任何水滴流到关键电子元件上,输出"GG",否则输出"OK"。
  • 解决代码

    #include 
    #include
    #include
    #include
    #include
    #define LL long long
    using namespace std;
    int n, m;
    char c;
    int x, y;
    char a[1002][1002];
    int b[1002][2]; // b[k][0]是i,b[k][1]是j
    int tot = 0;
    bool judge = true;
    void simulate() {
    if (c == 'v') {
    // 下方向,水滴向下流动
    for (int k = 1; k <= tot; ++k) {
    int i = b[k][0];
    int j = b[k][1];
    int di = i + 1;
    while (di <= n && a[di][j] != 'x') {
    ++di;
    }
    if (a[di][j] == 'x' || di > n) {
    judge = false;
    return;
    }
    }
    } else if (c == '^') {
    // 上方向,水滴向上流动
    for (int k = 1; k <= tot; ++k) {
    int i = b[k][0];
    int j = b[k][1];
    int di = i - 1;
    while (di >= 1 && a[di][j] != 'x') {
    --di;
    }
    if (a[di][j] == 'x' || di < 1) {
    judge = false;
    return;
    }
    }
    } else if (c == '>') {
    // 右方向,水滴向右流动
    for (int k = 1; k <= tot; ++k) {
    int i = b[k][0];
    int j = b[k][1];
    int dj = j + 1;
    while (dj <= m && a[i][dj] != 'x') {
    ++dj;
    }
    if (a[i][dj] == 'x' || dj > m) {
    judge = false;
    return;
    }
    }
    } else if (c == '<') {
    // 左方向,水滴向左流动
    for (int k = 1; k <= tot; ++k) {
    int i = b[k][0];
    int j = b[k][1];
    int dj = j - 1;
    while (dj >= 1 && a[i][dj] != 'x') {
    --dj;
    }
    if (a[i][dj] == 'x' || dj < 1) {
    judge = false;
    return;
    }
    }
    }
    }
    int main() {
    cin >> n >> m >> c;
    for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
    cin >> a[i][j];
    if (a[i][j] == 'o') {
    tot++;
    b[tot][0] = i;
    b[tot][1] = j;
    }
    }
    }
    if (tot > 0) {
    simulate();
    }
    if (judge) {
    cout << "OK" << endl;
    } else {
    cout << "GG" << endl;
    }
    return 0;
    }

    代码解释

  • 读取输入:使用标准输入读取n、m和重力方向c,然后读取n行m列的状态矩阵。
  • 记录水滴位置:遍历状态矩阵,记录所有水滴的位置到数组b中。
  • 模拟流动:根据重力方向,分别处理水滴向下、向上、向右、向左流动的情况,检查是否有水滴流到关键电子元件上。
  • 判断结果:如果有任何水滴流到关键电子元件上,设置标志位judge为false,否则保持为true。最后根据标志位输出结果。
  • 转载地址:http://wpvoz.baihongyu.com/

    你可能感兴趣的文章
    Netty源码—7.ByteBuf原理四
    查看>>
    Netty源码—8.编解码原理一
    查看>>
    Netty源码—8.编解码原理二
    查看>>
    Netty源码解读
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Netty相关
    查看>>
    Netty遇到TCP发送缓冲区满了 写半包操作该如何处理
    查看>>
    Netty:ChannelPipeline和ChannelHandler为什么会鬼混在一起?
    查看>>
    Netty:原理架构解析
    查看>>
    Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
    查看>>
    Network Sniffer and Connection Analyzer
    查看>>
    Network 灰鸽宝典【目录】
    查看>>
    NetworkX系列教程(11)-graph和其他数据格式转换
    查看>>
    Networkx读取军械调查-ITN综合传输网络?/读取GML文件
    查看>>
    network小学习
    查看>>
    Netwox网络工具使用详解
    查看>>
    Net与Flex入门
    查看>>
    net包之IPConn
    查看>>
    Net操作配置文件(Web.config|App.config)通用类
    查看>>
    Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)
    查看>>