牛客周赛65(C++实现)

比赛链接:牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ

1.超市

1.1 题目描述

小红准备去超市买水果。已知苹果aaa元一斤,桃子bbb元一斤。
小红一共带了nnn元钱,她想知道自己最多可以买多少斤水果?
我们认为,同一种水果买的斤数必须是整数。
io描述

1.2 思路

为了买更多的水果,我就需要尽可能的买便宜水果。

1.3 代码

#include <vector>
#include <iostream>
#include <queue>
#include <string>

using namespace std;

int main()
{
	int a, b, n;
	cin >> n >> a >> b;
	int ans = 0;
	if (a > b)
	{
		ans = n / b;
	}
	else
	{
		ans = n / a;
	}
	cout << ans;
	return 0;
}

2. 雨幕

2.1 题目描述

今年的雨水格外的多,喜欢下雨的小红自然也很开心。
给定一个n行m列的地图,用字符表示降雨情况,'.‘代表未降雨,’*'代表降雨。请你帮小红求出有多少个2*2的区域满足该区域内全部都在降雨?
io描述

2.2 思路

暴力地遍历除去最后一行和最后一列的所有位置,和题目要求做对应对比,判断是否满足要求。

2.3 代码

#include <vector>
#include <iostream>
#include <queue>
#include <string>

using namespace std;

int main()
{
	int n, m;
	long long ans = 0;
	cin >> n >> m;
	vector<vector<char>> vv(n + 1, vector<char>(m + 1));
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= m; ++j)
			cin >> vv[i][j];
	for (int i = 1; i < n; ++i)
	{
		for (int j = 1; j < m; ++j)
		{
			if (vv[i][j] == '*' && vv[i + 1][j] == '*' && vv[i][j + 1] == '*' && vv[i + 1][j + 1] == '*')
				ans += 1;
		}
	}
	cout << ans;
	return 0;
}

3.闺蜜

3.1 题目描述

小红和小紫是好闺蜜,作为闺蜜当然要“友好”的一起玩游戏。
她们拿到了一个长度为偶数的数组,两人轮流进行取数,谁最终总和最大谁就获胜。小红先手取数。
但这个比赛显然对小紫是不公平的,因此小红允许小紫使用一次技能“隙间”,小紫在游戏的任何时期,可以将自己手中的一个元素和小红手中的一个元素进行交换(该技能最多释放1次)。请你判断两人都是用最优策略的情况下,谁将取得最终的胜利?
io描述

3.2 思路

因为小红抽卡在前,所以小红一定会拿当前卡组内的最大牌。而小紫只有一次的交换机会,为了使得效益最大化,小紫一定要用卡组内的最小值去换小红手里的最大值。为此交换的卡片就已经确定了,那么我们就可以去掉这两张牌,让两人玩这个游戏,最后再把最小牌给小红,最大牌给小紫。

3.3 代码

#include <vector>
#include <iostream>
#include <queue>
#include <string>
#include <algorithm>

using namespace std;
int t, n;
int arr[1010];
void slove()
{
	cin >> t;
	while (t--)
	{
		cin >> n;
		long long sum = 0LL;
		for (int i = 1; i <= n; ++i)
		{
			cin >> arr[i];
			sum += arr[i];
		}
		sort(arr + 1, arr + n+1);
		if (arr[1] == arr[n])
		{
			cout << "draw" << endl;
			continue;
		}
		long long tmp = 0LL;
		for (int i = 1; i <= n; i += 2)
		{
			tmp += arr[i];
		}
		long long kou = sum - tmp;
		if (kou - arr[n] + arr[0] > tmp - arr[0] + arr[n])
			cout << "kou" << endl;
		else
			cout << "yukari" << endl;
	}
}
int main()
{
	slove();
	
	return 0;
}

4. 医生

4.1 题目描述

小红是一名医生。
现在小红对于每个病人的症状用一个长度为mmm的01串表示,第iii个字符代表第iii个身体部位的症状,0代表健康,1代表不健康。
一共有kkk种药,每种药也用一个长度为mmm的01串表示,第iii个字符为’1’代表该药可以治愈第iii个部位的症状。
对于每个病人,请你帮小红求出治愈该病人需要开的最少的药数量。
io描述

4.2 思路

本题的思路还挺简单的,因为数据量的原因,药物只有10种。那么我们可以枚举出所有药物的使用组合。一共1024种。这题的巧思也就在这组合上面,我们要怎么写这个组合呢?

    for (int i = 1; i <= (1 << k); ++i)
    {
        for (int j = 0; j < k; ++j)
        {
            if ((i >> j)&1)
                v[i] |= me[j];
        }
    }

使用状态压缩的思路,一共k种药物,药物的组合情况一定为(1<<k)。用一个数来枚举这些情况,这个数的二进制位哪里有1,就使用该位对应的药物。这样就可以做到(1<<k)种情况都不遗漏了。最后我们只要数,该数有多少个1那么就说明了使用了多少种药物。

4.3 代码

#include <bits/stdc++.h>
#include <iostream>
#include <string>
using namespace std;
int n, m, k;
int p[10010],me[12],v[1050];

void solve()
{
    cin >> n >> m;
    string s;
    for (int i = 1; i <= n; ++i)
    {
        cin >> s;
        p[i] = stoi(s, 0, 2);
    }
    cin >> k;
    for (int i = 0;i < k; ++i)
    {
        cin >> s;
        me[i] = stoi(s, 0, 2);
    }
    for (int i = 1; i <= (1 << k); ++i)
    {
        for (int j = 0; j < k; ++j)
        {
            if ((i >> j)&1)
                v[i] |= me[j];
        }
    }
    for (int i = 1; i <= n; ++i)
    {
        int mi = k + 1;
        for (int j = 0; j <= (1 << k); ++j)
        {
            if ((v[j] & p[i]) == p[i])
            {
                mi = min(mi,__builtin_popcount(j));
            }
        }
        if (mi == k + 1)
            cout << -1 << endl;
        else
            cout << mi << endl;
    }

}
int main()
{
    solve();
    return 0;
}
目前并未找到关于周赛第87场的具体题解或比赛详情的信息。通常情况下,这类赛事的题解会在赛后由参赛者或者官方整理并发布至相关平台,例如网的比赛页面、博文章或其他技术社区。 如果需要获取更详细的资料,建议访问网的比赛历史记录页面,查找对应编号的比赛链接以及可能存在的赛后讨论区[^1]。此外,也可以关注一些活跃的技术博主或竞赛参与者,他们可能会分享自己的解题心得和思路[^2]。 以下是基于已有经验的一个通用方法来处理类似情况: ### 如何查询特定场次的周赛信息? 1. **进入官网** 打开(https://www.nowcoder.com/) 并导航到 ACM 比赛专区。 2. **检索目标比赛** 使用网站内置搜索功能输入关键词 “周赛 87”,查看是否有匹配的结果显示出来。 3. **查阅赛后分析文档** 很多时候选手们会将自己的思考过程撰写成博文形式公开分享给大众学习参考。可以通过搜索引擎附加限定条件比如加上站点名称(site:nowcoder.com)缩小范围快速定位相关内容。 ```python import requests def fetch_contest_info(contest_id): url = f"https://ac.nowcoder.com/acm/contest/{contest_id}" response = requests.get(url) if response.status_code == 200: return "Found Contest Info" else: return "Contest Not Found or No Access" print(fetch_contest_info(87)) ```
评论 98
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yui_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值