Codeforces Round #132 (Div. 2)

转载请注明出处,谢谢http://blog.csdn.net/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

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值