codeforces 1692 D

收获就是数据量不大的时候可以打个表…
题目链接

题目大意

给一个24小时制的初始时间 x x : x x xx:xx xx:xx,和一个间隔时间 x x x m i n min min,问如果从当下开始,每 x x x分钟看一次表,共能又几次看到回文字符型的时间,如 12 : 21 12:21 12:21

思路

观察发现只要求一天内的,所以时间表示形式共 24 ∗ 60 = 1440 24*60=1440 2460=1440种,而且间隔时间一定,所以我们打个数组抄出所有的回文时间,并把他们换算成分钟形式,方便后面计算,然后遍历记录每个时间,放在set里,防止重复,查一下就行了

ACcode

#include

using namespace std;

using ll = long long;

const int p[16] = { 0,70,140,210,280,350,601,671,741,811,881,951,1202,1272,1342,1412 };

//找最长的总和为s的子序列

void solve() {
    int a, b, c;char d;
    cin >> a >> d >> b >> c;//a小时,b分钟,c间隔
    int f = a * 60 + b;
    sets;
    s.insert(f);//录入时间
    int ff = f;
    f += c;
    if (f >= 1440)f -= 1440;
    while (f != ff) {
        s.insert(f);
        f += c;
        if (f >= 1440)f -= 1440;
    }
    int ans = 0;
    for (auto x : s)
        for (auto y : p)
            if (x == y) {
                ans++;
                break;
            }
    cout << ans << '\n';
}

int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t;cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

你可能感兴趣的:(c++,算法,开发语言)