Codeforces Round #811 (Div. 3)

A. Everyone Loves to Sleep

思路:

把所有的时间都换成分钟,先记录一下当前的时间,然后依次读入每个闹钟的时间,其中每个闹钟的时间减去现在的时间差值最小的就是答案,注意如果差值小于0说明到第二天了,就要加上24小时

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 15;

int a[N];

void solve()
{
    int n, h, m;
    cin >> n >> h >> m;
    int time = h * 60 + m;
    int res = 0x3f3f3f3f;
    for (int i = 1; i <= n; i ++ )
    {
        int hh, mm;
        cin >> hh >> mm;
        int t = hh * 60 + mm - time;
        if(t < 0)
            t += 24 * 60;
        res = min(res, t);
    }
    cout << res / 60 << ' ' << res % 60 << endl;
}

int main()
{
    int T = 1;
    cin >> T;
    while(T -- )
    {
        solve();
    }
    return 0;
}

B. Remove Prefix

思路:

因为只能删最左边的,所以我们从最右边开始看,只要遍历到左边一个和右边有的数那左边的数就都要删去

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 200010;

int a[N];

void solve()
{
    int n;
    cin >> n;
    set<int> s;
    for (int i = 1; i <= n; i ++ )
        cin >> a[i];
    for (int i = n; i >= 1; i -- )
    {
        if(s.count(a[i])) 
        {
            cout << i << endl;
            return;
        }
        s.insert(a[i]);
    }
    cout << 0 << endl;
}

int main()
{
    int T = 1;
    cin >> T;
    while(T -- )
    {
        solve();
    }
    return 0;
}

C. Minimum Varied Number

思路:

如果我们从1到9开始枚举的话不能保证是最小的,所以我们可以从9到1枚举,这样最后得到的会是最大值,然后reverse一下就是最小值

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 200010;

int a[N];

void solve()
{
    int n;
    cin >> n;
    string s;
    for(int i = 9; i >= 1; i -- )
        if(n - i >= 0)
        {
            n -= i;
            s += i + '0';
        }
    reverse(s.begin(), s.end());
    cout << s << endl;
}

int main()
{
    int T = 1;
    cin >> T;
    while(T -- )
    {
        solve();
    }
    return 0;
}

 

posted @ 2022-08-04 15:02  彦辰kkkkk  阅读(76)  评论(0)    收藏  举报