2021.01.23 Rating赛

A-Borya's Diagnosis

题意:

一个人去医院看医生,他需要按照1-n的顺序来看医生,这n名医生的工作时间安排类似于一个等差数列,从第s天开始,每隔d天再工作,求出他看完所有医生的时间。

解题思路:

用n个结构体来表示每一位医生的工作s和d,从头开始遍历,用一个变量来记录天数(res),初始为第一个医生的s,如果第i个医生的s小于res的话,就更新res为s,否则让s = s+d,一直到s小于res,最后输出res即可。

#include<bits/stdc++.h>
using namespace std;
typedef struct
{
    int s;
    int d;
} Doctor;
Doctor doc[1001];
int main()
{
    int n;
    cin>>n;
    for(int i = 0; i<n; i++)
    {
        cin>>doc[i].s>>doc[i].d;
    }
    int res = doc[0].s;
    for(int i = 1; i<n; i++)
    {
        while(doc[i].s<=res)
        {
            doc[i].s+=doc[i].d;
        }
        res = doc[i].s;
    }
    cout<<res<<endl;
}

B- Table Tennis

题目大意:

有1-n组成的一个排列,每个数代表一个人的power,两个人比赛时power大的人会获胜,比赛从左到右比,输了的人移到末尾,赢的人和下一个人比,当有一个人赢了k盘时输出该人的power

思路:

最开始的时候理解错题了,我理解成,如果当前玩家没有达到k次,则该玩家被调到最后。但是由于中间的偶然想法:没有达到k次责不需要从当前玩家的第二个继续进行比较,而是通过把当前玩家输给的那个人更新成为新的当前玩家,弥补了这个错误。

#include<bits/stdc++.h>
using namespace std;
int people[501];
int main()
{
    long long n,k;
    cin>>n>>k;
    for(int i = 0;i<n;i++)
        cin>>people[i];
    int res = people[0];
    int cnt = 0;
    for(long long i = 1;i<n;i++)
    {
        if(cnt>=k){
            cout<<res<<endl;
            return 0;
        }
        if(res>people[i])
            cnt++;
        else
        {
            cnt = 1;
            res = people[i];//没有必要遍历,如果找到小的那么直接把初始位置移动到这个地方
        }

    }
    cout<<*max_element(people,people+n)<<endl;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务