2017桂城6年级(陈建均原文)

博客内容涉及C++编程,通过样例解释展示了如何寻找给定条件下最优解的过程。样例中给出了不同输入组合下,计算X和Y乘积的最大值,强调在满足条件的情况下找到更优解的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 更多闰年数(
a.cpp)
【题目描述】
在 smoj 网站上,有很多针对小学信息学入门的课程,把这些入门课程的题都刷
一遍并理解之后,你就算正式的信息学选手啦。例如课程 9 的某一道题是这样的
(附网址 http://smoj.nhedu.net/showproblem?id=1117):
输入两个正整数 a 和 b,表示开始的年份和结束的年份,问从 a 年到 b 年有多少
闰年?闰年只需要满足如下两个条件之一:
1、能整除 400。
2、能整除 4,但不能整除 100。
【输入格式】
第一行 2 个整数 a 和 b,范围在[1, 1000000000]。
【输出格式】
一个整数。
输入样例
1 10000
输出样例
2425
【提示】 对于 80%的数据,b<=100000000。
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cmath>
#include<string>
#include<cstring>
using namespace std;
int a,b;
int main(){
	cin>>a>>b;
	if(a>b){
		swap(a,b);
	}
	a--;
	cout<<b/4-a/4-b/100+b/400+a/100-a/400;
	return 0;
}
2、吃萝卜(b.cpp)
【题目描述】
兔子有 N 盒胡萝卜,编号 0 到 N-1,第 i 盒包含 a[i]根胡萝卜。她决定从这些盒
子里总共吃 K 根胡萝卜。她一次只吃一根胡萝卜,每次从胡萝卜最多的盒子里选
一个胡萝卜吃。如果有多个满足条件的盒子,她将选择其中编号最小的盒子。输 出最后一次吃胡萝卜的盒子编号。
【输入格式】
第 1 行,两个正整数,N 和 K。1 <= N <= 50。
第 2 行,N 个整数,第 i 个整数是 a[i]。1 <= a[i] <= 100。数据保证所有的
胡萝卜总和大于等于 K。
【输出格式】
一个整数,表示最后一次吃胡萝卜的盒子编号
输入样例
2 3
5 8
输出样例
1
输入样例
2 4
5 8
输出样例
0
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cmath>
#include<string>
#include<cstring>
using namespace std;
int n,m,a[60],maii=100000,maij=-11000,mai;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	while(m--){
		maij=-100;
		for(int i=1;i<=n;i++){
			if(a[i]>maij){
				maij=a[i];
				mai=i;
			}
		}
		a[mai]--;
		maii=min(maii,mai);
	}
	cout<<maii-1;
	return 0;
}
3、 倍数( c.cpp
【题目描述】
给定一个整数 X ,能不能通过调换 X
### 关于小学2022A竞赛中的双指针贪心算法 #### 使用双指针解决特定问题 对于涉及序列或数组的问题,双指针是一种高效的解决方案。通过设置两个指针遍历数据结构的不同部分,可以在一次线性扫描中完成复杂操作。 考虑一个具体例子,在处理有序列表合并时,可以初始化两个指针分别指向两个输入列表的起始位置。每次比较当前所指元素大小并移动较小者对应的指针向前推进一位直到其中一个到达终点为止[^3]。 ```cpp vector<int> mergeTwoSortedArrays(vector<int>& nums1, vector<int>& nums2){ int p1 = 0; int p2 = 0; vector<int> result; while (p1 < nums1.size() && p2 < nums2.size()){ if(nums1[p1] <= nums2[p2]){ result.push_back(nums1[p1]); ++p1; } else{ result.push_back(nums2[p2]); ++p2; } } // Append remaining elements from either array that has not been fully traversed. while(p1 < nums1.size()) { result.push_back(nums1[p1++]); } while(p2 < nums2.size()) { result.push_back(nums2[p2++]); } return result; } ``` #### 应用贪心策略解决问题 当面对资源分配类问题时,采用贪心方法往往能简化逻辑设计。该思路强调每一步都做出局部最优的选择以期望最终达到全局最佳效果。 例如在一个区间覆盖问题里,为了使选中的区间的总长度最小化同时完全覆盖给定范围内的所有点,则可以从左至右依次选取最早结束但仍可包含下一个未被触及的位置作为新加入集合的一员直至整个区域都被满足条件的子集囊括进去[^4]. ```cpp int minIntervalCover(vector<pair<int,int>>& intervals){ sort(intervals.begin(), intervals.end()); int coveredEnd = INT_MIN; int count = 0; for(auto& interval : intervals){ if(interval.first > coveredEnd){ coveredEnd = interval.second; ++count; }else if(interval.second < coveredEnd){ coveredEnd = interval.second; } } return count; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值