2021-11-23

A - On and Off

题意:输入三个数,第一个代表灯开启的时间,第二个代表灯关闭的时间,输入第三个数之后判断在这个时间灯是不是亮着的。

思路:二十四小时制,所以要先进行判断是在哪个时间段,再判断x在不在这个区间当中,符合条件就是yes,否则就是no

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int s,t,x;
    cin>>s>>t>>x;
    if(s<t){
        if(s<=x&&x<t)cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }else{
        if(x<t||s<=x)cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

B - Takahashi’s Secret

题意:我有N个朋友,我跟X有小秘密,但是X会告诉a[X],a[X],会告诉a[a[X]],问最后一共能有多少个人知道这个秘密。

比如:

4 2

3 1 1 2

2号吧秘密告诉给1号,1号告诉给3号,3号告诉给1号,所以最后有1,2,3三个人知道,所以答案就是3.

思路:定义两个数组,一个是谁告诉谁的数组,一个数组用来记录谁知道了,循环的条件就是告诉下一个人,但是下一个人的标志数组为1,代表已经知道了,循环就结束,最后再遍历标志数组,记录为1的,就代表知道了,最后输出ans;

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int main()
{
    int n,x;
    int vist[N],a[N];
    cin>>n>>x;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    while(vist[x]==0){
        vist[x]=1;
        x=a[x];
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        if(vist[i]==1)
            ans++;
    }
    cout<<ans<<endl;
    return 0;
}

C - Final Day

题意:有N个学生,每人有四场考试,前三场都考完了,分数已知,问每个学生在第四天考完能不能进入前K名。

思路:就是第四场考试,让判断的那个人考300分,其他人全部都是0分,只需要考虑这种极端的情况就可以,定义两个数组,一个是记录每个人的成绩,另一个用来记录前三场成绩从大到小的结果,当判断第i个人的时候只需要将他的分数加上300与第k-1的分数比就可以了。

大于等于这个分数就是能,否则就是no。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int main()
{
    int n,k;
    int a[N],b[N];
    cin>>n>>k;
    for(int i=0;i<n;i++){
        int aa,bb,c;
        cin>>aa>>bb>>c;
        a[i]=aa+bb+c;
        b[i]=aa+bb+c;
    }
    sort(a,a+n);
    reverse(a,a+n);
    for(int i=0;i<n;i++){
        b[i]+=300;
        if(b[i]>=a[k-1])cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_53236380/article/details/121501960