• 见面与问候(思维)


    题意

    有两头牛在一维坐标轴上行走,他们分开后每次相遇都会打招呼。

    分别给出这两头牛的行走情况,每次行走给出行走时间和方向,每一单位时间行走\(1\)单位距离。

    他们的行走时间不超过\(10^6\)

    求他们打招呼的次数。

    思路

    由于时间范围较小,因此我们可以存储每头牛每一时刻的位置,记为\(a\)\(b\)

    • 如果往右走,那么\(a_t = a_{t - 1} + 1\)
    • 如果往左走,那么\(a_t = a_{t - 1} - 1\)

    需要注意一点,如果其中一头牛在\(t_1\)时刻停下,另一头牛在\(t_2\)时刻停下,并且\(t_1 < t_2\)。则第一头牛在\(t_1 + 1 \sim t_2\)时刻的位置与在\(t_1\)时刻的位置相同。

    如果\(a_i = b_i\),并且行走方向相反或一头牛停止,即\(|a_i - a_{i - 1} + b_i - b_{i - 1}| < 2\),则答案\(+1\)

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int N = 1000010;
    
    int n, m;
    int a[N], b[N];
    
    int main()
    {
        scanf("%d%d", &n, &m);
        int t1 = 0, t2 = 0;
        for(int i = 0; i < n; i ++) {
            int d;
            char op[5];
            scanf("%d%s", &d, op);
            for(int j = 0; j < d; j ++) {
                t1 ++;
                if(*op == 'L') a[t1] = a[t1 - 1] - 1;
                else a[t1] = a[t1 - 1] + 1;
            }
        }
        for(int i = 0; i < m; i ++) {
            int d;
            char op[5];
            scanf("%d%s", &d, op);
            for(int j = 0; j < d; j ++) {
                t2 ++;
                if(*op == 'L') b[t2] = b[t2 - 1] - 1;
                else b[t2] = b[t2 - 1] + 1;
            }
        }
        int ans = 0;
        int t = max(t1, t2);
        for(int i = 1; i <= t; i ++) {
            if(i > t1) a[i] = a[t1];
            if(i > t2) b[i] = b[t2];
        }
        for(int i = 1; i <= t; i ++) {
            if(a[i] == b[i] && abs(a[i] - a[i - 1] + b[i] - b[i - 1]) < 2) {
                ans ++;
            }
        }
        printf("%d\n", ans);
        return 0;
    }
    
  • 相关阅读:
    ex3多类问题和NN中的前向传播
    逻辑关系下的NN应用
    NN-Neural Network
    ex2:逻辑回归及正则条件下的练习
    Overfitting&Underfitting Problems
    操作系统内存管理之虚拟内存
    C陷阱与缺陷读书笔记(三)
    操作系统常见面试题
    计算机网络常考面试题总结
    堆及堆排序
  • 原文地址:https://www.cnblogs.com/miraclepbc/p/16196124.html
Copyright © 2020-2023  润新知