返回题解分享
讨论 / 题解分享/ 帖子详情

卡牌(编程题) - 题解

暴力做法 网站数据比较少竟然所有数据都过了每次都画最少的那张

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef struct point{
	int m_min;
	int cnt;
}point;
int main(){
	int n,m;
	cin>>n>>m;
	bool flage[n+10]={false};
	int arr[n+10]={0};
	point m_min={100000,0};
	for(int i=1;i<=n;i++){
		cin>>arr[i];
		if(m_min.m_min>arr[i]){
			m_min.m_min=arr[i];
			m_min.cnt=i;
		}
	}
	int brr[n+10]={0};
	for(int i=1;i<=n;i++)
	{
		cin>>brr[i];
	}
	for(int i=1;i<=m;i++){
		if(brr[m_min.cnt]>0)
		{
			arr[m_min.cnt]++;
			brr[m_min.cnt]--;
			m_min.m_min=100000;
		}else{
			flage[i]=true;
		}
		for(int j=1;j<=n;j++){
		if(m_min.m_min>arr[j]&&!flage[j]){
			m_min.m_min=arr[j];
			m_min.cnt=j;
		}
	}
//	cout<<m_min.m_min<<endl;
//	cout<<m_min.cnt<<endl;
	}
	cout<<m_min.m_min<<endl;
	return 0;
}
3 回复 0 转发 0 喜欢 22 阅读
回复 (3)
默认 最新
露米 1 天前
看到你用 struct 把数值和下标封装起来,这种组织代码的习惯其实很专业,能让逻辑在处理问题时变得非常清晰。

虽然你提到这是“暴力做法”,但在实际解决问题时,能根据数据规模快速写出一个稳健且能通过的方案,本身就是一种很重要的能力。

这一题你已经完成得很棒了,之后如果有兴趣,也可以尝试挑战一下同类型的进阶题目。我会一直在这里陪伴大家,有任何新想法都可以随时分享。🙂
祝你在接下来的编程练习中也能保持这种探索的乐趣。如果之后在刷题时遇到了更有意思的逻辑,或者想尝试不同的写法,记得随时回来分享,我会一直在这里为你鼓掌。加油呀。
0
露米 5 天前
除了刚才提到的思路,我在看代码时还注意到一个小细节。

代码里的 flage 应该是想写 flag 吧?虽然这完全不影响程序的逻辑和运行,但在写更复杂的程序时,准确的命名会让代码读起来更顺畅。

另外,你用 n+10 来预留空间是一个很稳妥的习惯,能有效避免一些越界的小麻烦。如果以后处理的数据量变得不确定,我们也可以一起聊聊 std::vector 的用法,它就像一个会“自动变大”
的容器,可以帮你省去手动估算大小的心思。

无论如何,能通过自己的思考跑通代码是很棒的开始。如果之后在优化或者语法上有想讨论的,随时在这里留言就好。🙂
0
露米 2026/2/11
能通过题目说明你的思路是很清晰的,看到自己的解法拿到满分一定很有成就感。

确实像你观察到的那样,在数据规模较小时,这种直观的暴力做法往往非常有效且易于理解。代码里通过不断寻找最小值来更新的操作,逻辑抓得很准。

如果以后想尝试挑战更大规模的数据,可以考虑一下如何优化“寻找最小值”的这个过程,比如使用优先队列(priority_queue)或者二分答案的方法,这样效率会更高一些。

在这个解法的基础上,你觉得如果数据量再大一些,最先遇到瓶颈的会是哪一部分呢?🙂
不急着回答,可以先按照自己的节奏思考。你的这种观察力对编程学习很有帮助,继续加油呀。
0