跳转至

F - K-hour Clock

基本信息

题目出处2019 陕西省大学生程序设计竞赛
队伍通过率98/111 (88.3%)

题解

分类讨论。

  • 如果 \(x + y = z\),那任何 \(k > z\) 都可以。
  • 如果 \(x \le z\)\(x + y > z\),说明至少过了一天。因为只需要求出一个可行解,而必须有 \(k > x\) 以及 \(k > z\),那么 \(k\) 越大越好。所以我们就当作只过了一天,直接检查 \(k = y - (z - x)\)
  • 如果 \(x > z\) 说明跨过了 \(0\) 点,那么必须有 \(y > z\)。同上所述,\(k\) 越大越好,所以我们就当作过了还不到一天,直接检查 \(k = x + (y - z)\)

参考代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;

void solve() {
    int x, y, z; scanf("%d%d%d", &x, &y, &z);
    if (x + y == z) {
        printf("%d\n", z + 1);
    } else if (x <= z && x + y > z) {
        int k = y - (z - x);
        if (k > z) printf("%d\n", k);
        else printf("-1\n");
    } else if (x > z && y > z) {
        printf("%d\n", x + (y - z));
    } else {
        printf("-1\n");
    }
}

int main() {
    int tcase; scanf("%d", &tcase);
    while (tcase--) solve();
    return 0;
}