AcWing 打卡记录day 5

102. 最佳牛围栏
是一个二分的题目,但是check函数很难想。
因为是浮点型,所以二分格式中就不需要-1了。
题目要求的是最大的平均值。那么我们就二分来求平均值。
传进去的参数mid 是我们假定的平均值。
然后计算每个数对这个平均值的影响。
然后通过前缀和,快速得到某一段区间对这个平均值的收益。
如果这个区间大于等于m并且收益大于0。就说明这个不是最大的平均值。
现在的问题是怎么确定这个区间。
我们用一个数,来存前面的k个数对平均值收益最小的值。
因为如果这个区间加上后面的那个数之后,如果后面那个数比平均值小,那么肯定前k+1个数的收益现在是最小的了,那么肯定不会选这个第k+1个数。而是从k+2开始往后面选大于等于m个数。

#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define endl '\n'
const int inf=0x3f3f3f3f;
const int MAXN=1e5+10;
int n,m,T;
int flag; 

double a[MAXN];
double pre[MAXN];
bool check(double mid){
	for(int i=1;i<=n;i++){
		pre[i]=pre[i-1]+a[i]-mid;//计算与mid的差距
	}
	double minn=0;
	for(int i=0,j=m;j<=n;i++,j++){//j=m开始时因为 题目给出了条件,要求的至少长度
		minn=min(minn,pre[i]);
		if(pre[j]-minn>=0){
			return true;
		}
	}
	return false;
}
int main() 
{
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	double r=0,l=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		r=max(r,a[i]);
	}
	while(r-l>1e-5){
		double mid=(r+l)/2;
		if(check(mid)){
			l=mid;
		}else{
			r=mid;
		}
	}
	cout<<(int)(r*1000)<<endl;
	return 0;
}

103. 电影
就是一个简单的排序。运用map都不需要离散化了。

#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define endl '\n'
const int inf=0x3f3f3f3f;
const int MAXN=2e5+10;
int n,m,T;
int flag; 

struct node{
	int a,b;
	int set;
};

node v[MAXN];
bool cmp(node x,node y){
	if(x.a==y.a){
		return x.b>y.b;
	}
	return x.a>y.a;
}
int a[MAXN];
int main() 
{
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	map<int,int>mp;//放会这种语言的人数
	for(int i=1;i<=n;i++){
		cin>>a[i];
		mp[a[i]]++;
	}
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>a[i];
	}
	for(int i=1;i<=m;i++){
		int b;
		cin>>b;
		v[i].a=mp[a[i]],v[i].b=mp[b];
		v[i].set=i;
	}
	sort(v+1,v+1+m,cmp);
	cout<<v[1].set<<endl;
	return 0;
}

104. 货仓选址
一点贪心,很容易看出。取中位数距离是最短的。
如果是奇数就是正中间那个数,如果是偶数,则在中间两个数之间就行。包括这两个数。
排完序,确定位置。然后将数组遍历一遍即可。

#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define endl '\n'
const int inf=0x3f3f3f3f;
const int MAXN=1e5+10;
int n,m,T;
int flag; 

int a[MAXN];
int main() 
{
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	int sum=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+1+n);
	int mid=(n+1)/2;
	for(int i=1;i<=n;i++){
		sum+=abs(a[mid]-a[i]);
	}
	cout<<sum<<endl;
	return 0;
}
开发微信小程序的打卡记录功能可以按照以下步骤进行: 1. 首先,你需要设计小程序的用户登录授权规范。根据微信官方的要求,用户在未授权之前应该能够大概了解小程序的功能。因此,在用户进入小程序时,你可以展示一些功能的预览,但在使用这些功能之前,需要用户进行授权。这样可以避免审核不通过的问题。\[2\] 2. 接下来,你需要设计打卡记录的界面和功能。用户可以在小程序中进行打卡操作,并记录相关的信息,如打卡时间、地点等。你可以使用小程序提供的数据存储功能,将打卡记录保存在后台服务器或云数据库中。 3. 如果你的打卡记录功能涉及到上传图片,你可以使用循环上传的方法来实现批量上传图片。在选择图片时,将图片存储在一个数组中,然后循环这个数组,使用小程序提供的上传文件接口将图片上传到服务器。\[3\] 4. 在上传图片时,你可以考虑使用微信官方提供的图片内容安全检测接口,对上传的图片进行法规检验,以防止包含违规、涉黄等信息。这样可以增加审核通过的几率。\[1\] 5. 最后,完成开发后,你需要将小程序的代码上传并提交给微信官方进行审核。等待审核通过后,你的小程序就可以正式上线,用户可以使用打卡记录功能了。 总结起来,开发微信小程序的打卡记录功能需要设计用户登录授权规范,实现打卡记录的界面和功能,处理批量上传图片的难点,并在上传图片时进行内容安全检测。完成开发后,将代码上传并提交审核,等待审核通过后即可上线使用。 #### 引用[.reference_title] - *1* *2* *3* [微信小程之打卡小程序开发](https://blog.csdn.net/zyf_smile/article/details/106671111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值