AtCoder Beginner Contest 228

这篇博客详细解析了AtCoder Beginner Contest 228中的六道编程题目,包括A. On and Off、B. Takahashi’s Secret、C. Final Day、D. Linear Probing、E. Integer Sequence Fair和F. Stamp Game。针对每一道题目,博主给出了题目描述、解题思路和代码实现,涉及C++编程、算法设计以及ACM竞赛策略。
摘要由CSDN通过智能技术生成

A. On and Off

题目描述

​ 二十四小时进制下,在 S S S 0 0 0分开灯,在 T T T 0 0 0分关灯,问 X X X 30 30 30分是否灯亮?

分析

​ 两种情况

  • S ≤ T : S\le T: ST: 那么 X X X一定要在区间 [ S , T ) [S,T) [S,T)
  • S > T : S>T: S>T:跨过了 24 24 24点,那么 X X X ≥ S \ge S S或者 < T <T <T

代码

#include<bits/stdc++.h>
using namespace std;

int main()
{
	ios::sync_with_stdio(0);
	int S,T,X;
	cin>>S>>T>>X;
	bool f;
	if (S<=T)f = (X>=S&&X<T);
	else f = (X>=S||X<T);
	cout<<(f?"Yes\n":"No\n");
}

B. Takahashi’s Secret

题目描述

​ 高桥君有 n n n个好朋友,高桥将秘密告诉好朋友 X X X,然而,每个朋友 i i i如果知道这个秘密,将告诉朋友 A i A_i Ai请问最后一共有几个朋友知道这个秘密?

分析

​ 我们只要模拟信息传递的过程就可以了,类似于 d f s dfs dfs但是可以更为简单的实现

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+100;
int a[maxn],b[maxn];
int n,x;
int main()
{
	ios::sync_with_stdio(0);
	cin>>n>>x;
	for (int i=1;i<=n;++i)cin>>a[i];
	int ans = 0;
	while (!b[x])
	{
		b[x]=1;
		x = a[x];
		++ans;
	}cout<<ans<<endl;
}

C.Final Day

题目描述

n n n名考生,已经进行了三门考试。第四门考试满分 300 300 300,对每一名考生,询问他是否有可能总分在前 k k k名内?

分析

​ 很简单,判断第 i i i名考生时,我们认为他考了 300 300 300分,其他人都考了零分,然后看他是否能进前 k k k

代码

#include <bits/stdc++.h>
using namespace std;
int main() {
   
    int n, k;
    cin >> n >> k;
    k -= 1;
    vector<int> p(n);
    for (int& x : p) {
   
        int a, b, c;
        cin >> a >> b >> c;
        x = a + b + c;
    }
    vector<int> q = p;
    sort(begin(q), end(q), greater<>());
    for (int x : p) {
   
        cout << (x + 300 >= q[k] ? "Yes" : "No") << '\n';
    }
}

D.Linear Probing

题目描述

​ 长度为 n n n的数组 a a a,初始元素都为 − 1 -1 1

现在要求执行 q q q次操作,操作有两种

  • 给出数字 x x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值