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;
}