专栏文章

题解:P14257 嫉妒(jealousy)

P14257题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minjgncn
此快照首次捕获于
2025/12/02 03:25
3 个月前
此快照最后确认于
2025/12/02 03:25
3 个月前
查看原文

TJ P14257

前言

一道看似困难实则简单的题目。不需要数学,仅需 22for 循环轻松拿下。

Analysis

题目中仅给出了 44 个变量,这种题根据经验一般为数学题。但是看过 Tag 变量范围:
1n101\le n\le100y300\le y\le301s,t301\le s,t\le30
发现其实可以暴力枚举。
具体如何枚举呢?
首先,枚举一个时刻 ii 表示面试进行的场数。枚举一个变量 jj 表示小 Y 转的圈数。枚举范围,由
具体地,他会在第 y+j×ty + j × t 分钟在面试间门口。
ii 场面试的时间为从第 (i1)×s(i − 1) × s 分钟到第 i×si× s 分钟。
可知,应为 00ntn \cdot t 之间。
判断是否正好撞上小 Y 时,可以判断上一场面试开始与结束的时间是否与小 Y 在面试间门口时间相等。
因此,就很好写出代码了:

Code

CPP
#include <bits/stdc++.h>

using namespace std;

int main() {
    int n, y, s, t; // n: 面试的场数; y: 来的时刻; s: 面试持续的时间; t: 巡逻一圈的时间
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> y >> s >> t;

    for (int i = 1; i <= n; i++) { // i: 面试的场数
        int sk1 = (i - 1) * s; 
        int sk2 = i * s; // 两个时刻
        bool flag = true; // 是否有一个符合题意的时刻
        for (int j = 0; j * t + y <= n * s; j++) {
            if (j * t + y == sk2 || j * t + y == sk1) {
                flag = false;
                break;
            }
        }
        if (flag) {
            cout << "Yes";
            goto end; // 不想写 return 0
        }
    }

    cout << "No";
    end:
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...