Codeforces Round #132 (Div. 2)

本文解析了五道经典编程题目,包括寻找比例最大的配对、计算奖牌尺寸、统计交叉图形数量、解决高温天气问题及查找区间内的周期数。通过详细代码展示了不同问题的解决思路。

转载请注明出处,谢谢http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents by---cxlove

表示没有rate,没动力。。。

A. Bicycle Chain

很少,找出比例最大的有多少个,暴力

#include<iostream>
#include<cstdio>
#include<cstring>
#define N 2000000
#define LL long long
#define eps 1e-7
using namespace std;
int n,m,a[100],b[100];
int main(){
	while(scanf("%d",&n)!=EOF){
		for(int i=0;i<n;i++)
			scanf("%d",&a[i]);
		scanf("%d",&m);
		for(int i=0;i<m;i++)
			scanf("%d",&b[i]);
		int mmax=0,cnt=0;
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++)
				if(b[j]%a[i]==0){
					if(b[j]/a[i]==mmax)
						cnt++;
					else if(b[j]/a[i]>mmax){
						mmax=b[j]/a[i];
						cnt=1;
					}
				}
		printf("%d\n",cnt);
	}
	return 0;
}

B. Olympic Medal

得出公式:(pi*r1*r1-pi*r2*r2)*p2/(pi*r2*r2*p1)=A/B进行化简后得到 r2^2=(1+A*p1/B*p2)*r1*r1

得到r2=sqrt(r1*r1*b*p1/(A*p2+B*p1))

如果要得到r2最大,显然p1要最大,p2要最小,r1要最大

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define N 2000000
#define LL long long
#define inf 1<<29
#define eps 1e-7
using namespace std;
int n,m,k,x[5000],y[5000],z[5000];
int main(){
	while(scanf("%d",&n)!=EOF){
		int r1=0;
		for(int i=0;i<n;i++){
			scanf("%d",&x[i]);
			r1=max(r1,x[i]);
		}
		scanf("%d",&m);
		int p1=0;
		for(int i=0;i<m;i++){
			scanf("%d",&y[i]);
			p1=max(p1,y[i]);
		}
		int p2=inf;
		scanf("%d",&k);
		for(int i=0;i<k;i++){
			scanf("%d",&z[i]);
			p2=min(p2,z[i]);
		}
		int a,b;	
		scanf("%d%d",&a,&b);
		double r2=sqrt((double)r1*r1*b*p1*1.0/(a*p2+b*p1));
		printf("%.10f\n",r2);
	}
	return 0;
}

C. Crosses

枚举统计,见代码注释。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define N 2000000
#define LL long long
#define inf 1<<29
#define eps 1e-7
using namespace std;
int n,m,s;
int main(){
	while(scanf("%d%d%d",&n,&m,&s)!=EOF){
		LL ans=0;
		//枚举第一个矩阵的长和宽,注意都为奇数
		for(int i=1;i<=n;i+=2)
			for(int j=1;j<=m;j+=2){
				LL area1=i*j;
				//如果第一个矩形刚好就是总面积
				if(area1==s)
					//2*(i/2+1)*(j/2+1)-1表示的是a,b,c,d选择的可能性,确定一个矩阵之后,另外一组要求就可以在一定范围内任意取
					//(n-i+1)纵向中心的选择
					//(m-j+1)横向中心的选择
					ans+=(LL)(2*(i/2+1)*(j/2+1)-1)*(n-i+1)*(m-j+1);
				else if(area1<s){
					LL area2=s-area1;
					//第二个矩阵多出的面积,两边对称,肯定为偶数
					if(area2%2==0)
						//枚举额外的宽
			    		for(int k=2;k+j<=m;k+=2)
							if(area2%k==0){
								int t=area2/k;
								//高度比原先的小
								if(t<i&&t&1)
									ans+=(LL)2*(n-i+1)*(m-k-j+1);
							}
				}
			}
		printf("%I64d\n",ans);
	}
	return 0;
}

D. Hot Days

直接贪心,YY出几种可行解。

首先考虑一种特殊情况,避免RE:原有温度比上限高,表示肯定要上诉,肯定只需要一辆车

其余情况:

1、用最少的车,每辆车刚好达上限,全无上诉

2、只用一辆车

3、只有一辆车超了,其它车刚好满

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define N 2000000
#define LL long long
#define inf 1<<29
#define eps 1e-7
using namespace std;
int n,m;
LL t,T,x,cost;
int main(){
	while(scanf("%d%d",&n,&m)!=EOF){
		LL ans=0;
		for(int i=0;i<n;i++){
			scanf("%I64d%I64d%I64d%I64d",&t,&T,&x,&cost);
			LL temp;
			if(t>=T)
				ans+=cost+m*x;
			else{
				LL p=T-t;
				LL k=m/p+(m%p==0?0:1);
				temp=k*cost;
				if(p*x<=cost)
					temp=min(temp,cost+x*m);
				else{
					LL num=m%p+p;
					if(m%p==0)
						num+=p;
					if(num<=m)
						temp=min(cost*(k-1)+num*x,temp);
				}
				ans+=temp;
			}		
		}
		printf("%I64d\n",ans);
	}	
	return 0;
}

E. Periodical Numbers

求区间内,二进制出现循环节的数有多少个,求指导




内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值