Codeforces Round #132 (Div. 2)

来源:互联网 发布:中企动力域名 编辑:程序博客网 时间:2024/06/08 11:05

转载请注明出处,谢谢 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-7using 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-7using 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-7using 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-7using 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

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




原创粉丝点击