2023/3/1

文章包含多个编程挑战的解决方案,涉及数论(如计算整数乘积尾部零的数量)、图论(判断岛屿是否会被全球变暖淹没)、动态规划(优化手机测试策略)以及字符串处理(解码汉字编码)。这些问题展示了在信息技术领域中常见的算法思维和问题解决技巧。
摘要由CSDN通过智能技术生成

2023/3/1

乘积尾零

在这里插入图片描述
分解成2和5,答案即为min(2的个数,5的个数)

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
int a[100]={
	5650 ,4542, 3554, 473 ,946, 4114 ,3871 ,9073, 90, 4329, 
	2758 ,7949, 6113, 5659, 5245, 7432, 3051, 4434, 6704, 3594, 
	9937, 1173, 6866, 3397, 4759, 7557, 3070, 2287, 1453, 9899 ,
	1486 ,5722, 3135, 1170, 4014, 5510, 5120, 729 ,2880, 9019 ,
	2049 ,698 ,4582 ,4346 ,4427 ,646, 9742, 7340, 1230, 7683 ,
	5693 ,7015, 6887, 7381, 4172, 4341, 2909, 2027, 7355, 5649, 
	6701 ,6645, 1671, 5978, 2704, 9926, 295, 3125 ,3878, 6785 ,
	2066 ,4247, 4800, 1578, 6652, 4616 ,1113, 6205, 3264, 2915 ,
	3966 ,5291 ,2904, 1285 ,2193, 1428, 2265, 8730, 9436, 7074, 
	689, 5510, 8243, 6114 ,337 ,4096, 8199 ,7313, 3685,211
};
int a2,a5;
void slove(){
	for(int i=0;i<100;i++){
		while(a[i]%5==0){
			a[i]/=5;
			a5++;
		}	
		while(a[i]%2==0){
			a[i]/=2;
			a2++;
		}
	}
	cout<<min(a2,a5)<<endl;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}

全球变暖

在这里插入图片描述
一个岛屿如果有一个点四个方向都是陆地则不会淹没

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
int n;
char a[1005][1005];
int sx[4]={0,0,1,-1},sy[4]={1,-1,0,0};
bool vis[1005][1005],p;
void dfs(int x,int y){
	vis[x][y]=true;
	bool t=false;
	for(int i=0;i<4;i++){
		int xx=x+sx[i],yy=y+sy[i];
		if(xx<1||xx>n||yy<1||yy>n||vis[xx][yy])continue;
		if(a[xx][yy]=='.')t=true;
		else dfs(xx,yy);
	}
	if(!t)p=true;
}
void slove(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)cin>>a[i][j];
	}
	int ans=0,res=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(!vis[i][j]&&a[i][j]=='#'){
				p=false;
				dfs(i,j);
				res++;
				if(p)ans++;
			}
		}
	}
	cout<<res-ans<<endl;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}

第几天

在这里插入图片描述

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
void slove(){
	cout<<31+29+31+30+4<<endl;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}

明码

在这里插入图片描述
题目意思比较绕
简单的说就是一个字由32个字节表示,每个字节为8位二进制数,每行2个字节。
例如第一行表示
在这里插入图片描述
最后得出的汉字为 “ 九的九次方是多少?”
计算该答案

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
void prt(int x){
	if(x<0)cout<<"1";
	else cout<<" ";
	for(int k=6;k>=0;k--){
		if((x>>k)&1)cout<<"1";
		else cout<<" ";
	}
}
void slove(){
	int cnt=0;
	for(int i=1;i<=10;i++){
		for(int j=1;j<=16;j++){
			int x;
			cin>>x;
			prt(x);
			cin>>x;
			prt(x);
			cout<<endl;
		}
	}
}
int main(){
//	ios::sync_with_stdio(false);
//	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		freopen("zi.in","r",stdin);
		freopen("c.out","w",stdout);
		slove();
		fclose(stdin);
		fclose(stdout);
	}
	return 0;
}

测试次数

在这里插入图片描述
一开始我以为是用二分的求法直接对半去摔,然后看到了《每个商家抽样3部手机》。
只有1部手机的时候如果摔坏了就没得测试了所以只能从小到大测试
当有2部手机的时候就可以有一部手机可以跳着测
假如我当前从第k层摔下来,那么有2种情况
1.摔坏了,那我还剩一部手机可以只需要测1~k-1楼
2.没摔坏,那我可以继续测
三部手机也是如此
于是可以得出dp[i][j],表示测了i层,有j部手机需要多少次
dp[i][1]=i
dp[i][j]=min(dp[i][j],max(dp[i-k][j],dp[k-1][j-1])+1) …(j>1)

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
int dp[1005][3];
void slove(){
	int n=1000;
	for(int i=0;i<=n;i++)dp[i][1]=i;
	for(int j=2;j<=3;j++){
		for(int i=1;i<=n;i++){
			dp[i][j]=n;
			for(int k=2;k<=i;k++){
				dp[i][j]=min(dp[i][j],max(dp[i-k][j],dp[k-1][j-1])+1);
			}
		}
	}
	cout<<dp[n][3]<<endl;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}

递增三元组

在这里插入图片描述
对于每个数组从小到大排序
B数组从后往前二分去找到第一个大于Bj的Ck则对于当前j有n-k+1个大于当前的情况
为了使得A数组统计时只需要查找B所以在每个B的位置从后往前前缀和加上后面的情况数量

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
void slove(){
	int n;
	cin>>n;
	vector<int>a(n),b(n),c(n);
	vector<ll>s(n+1,0);
	for(auto &x:a)cin>>x;
	for(auto &x:b)cin>>x;
	for(auto &x:c)cin>>x;
	sort(a.begin(),a.end());
	sort(b.begin(),b.end());
	sort(c.begin(),c.end());
	for(int i=n-1;i>=0;i--){
		int j=upper_bound(c.begin(),c.end(),b[i])-c.begin();
		s[i]=s[i+1];
		s[i]+=n-j;
	}
	ll ans=0;
	for(int i=0;i<n;i++){
		int j=upper_bound(b.begin(),b.end(),a[i])-b.begin();
		ans+=s[j];
	}
	cout<<ans<<endl;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}

日志统计

在这里插入图片描述
对于每个id的t存入vector中,每一个vector从小到大排序,如果存在a[i+k-1]-a[i]<D则为热帖

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
int n,d,k;
void slove(){
	cin>>n>>d>>k;
	int cnt=0;
	unordered_map<int,int>mp;
	vector<vector<int>>a;
	for(int i=1;i<=n;i++){
		int t,id;
		cin>>t>>id;
		if(!mp.count(id)){
			mp[id]=cnt++;
			vector<int>b;
			a.push_back(b);
		}
		a[mp[id]].push_back(t);
	}
	vector<int>ans;
	for(auto [id,i]:mp){
		int m=a[i].size();
		if(m<k)continue;
		sort(a[i].begin(),a[i].end());
		for(int j=0;j+k-1<m;j++){
			if(a[i][j+k-1]-a[i][j]<d){
				ans.push_back(id);
				break;
			}
		}
	}
	sort(ans.begin(),ans.end());
	for(auto id:ans){
		cout<<id<<endl;
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}

乘积最大在这里插入图片描述

当k为偶数时
答案一定为非负数,只需要将数组排序后从前后2个2个取比大小即可得
若k为奇数时
1.全为负数则答案为负数
2.选取一个非负数后当作k为偶数的情况

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
#define int long long
const int mod=1e9+9;
void slove(){
	int n,k;
	cin>>n>>k;
	vector<int>a(n);
	for(auto &x:a)cin>>x;
	sort(a.begin(),a.end());
	int ans=1;
	int l=0,r=n-1;
	int f=1;
	if(k%2){
		ans=a[r];
		r--;
		k--;
		if(ans<0)f=-1;
	}
	while(k){
		int x=a[l]*a[l+1],y=a[r]*a[r-1];
		if(x*f>=y*f){
			ans=x%mod*ans%mod;
			l+=2;
		}
		else {
			ans=y%mod*ans%mod;
			r-=2;
		}
		k-=2;
	}
	cout<<ans<<endl;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--){
		slove();
	}
	return 0;
}
抱歉,我之前的回答并没有提及具体的开发时间表格。以下是根据您提供的项目阶段和预计用时的时间表格: | 项目阶段 | 开始时间 | 完成时间 | 预计用时 | 实际用时 | | -------------------------- | ---------- | ---------- | -------- | -------- | | 园区网络设计 | 2023/7/1 | 2023/7/1 | 1周 | 1周 | | - 需求分析和规划 | 2023/7/1 | 2023/7/1 | 1周 | 1周 | | - VLAN和子网配置 | 2023/7/2 | 2023/7/15 | 2周 | | | 楼宇的智能化管理 | 2023/7/16 | | 12周 | | | - 人脸识别和指纹识别系统安装 | 2023/7/16 | 2023/7/29 | 2周 | 2周 | | - 学生卡识别系统安装 | 2023/7/30 | 2023/8/5 | 1周 | 1周 | | - 空调管理系统安装 | 2023/8/6 | 2023/8/12 | 1周 | | | - 消防管理系统安装 | 2023/8/13 | 2023/8/26 | 2周 | | | - 监控管理系统安装 | 2023/8/27 | 2023/9/16 | 3周 | | | 停车场的智能化管理 | 2023/9/17 | | 6周 | | | - 停车场入门管理系统安装 | 2023/9/17 | 2023/9/30 | 2周 | 2周 | | - 剩余车位管理系统安装 | 2023/10/1 | 2023/10/7 | 1周 | 1周 | | - 收费管理系统安装 | 2023/10/8 | 2023/10/21 | 2周 | | | - 停车位提示和路径引导系统安装 | 2023/10/22 | 2023/10/28 | 1周 | | | 办公区的使用智能化管理 | 2023/10/29 | | 10周 | | | - 申请办公室系统开发和部署 | 2023/10/29 | 2023/11/19 | 3周 | | 请注意,实际用时可能会因各种因素而有所变化,以上时间表仅供参考。在项目实施过程中,及时进行进度跟踪和调整是必要的,以确保项目按时完成。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值