考试1+3题

12月30号,我们迎来了迎2018普及元旦‘欢乐’赛以下是题解:

第一题:

 

 

1.myc的IQ

  (iq.pas/c/cpp)

【问题描述】

 

     N年后,myc已经是世界某权威学会的会长,他发现自从学信息学竞赛以来,他的智商也在飞速增加,于是他利用大数据和人工智能做了一项调查,发现学信息学学生的IQ真的非常高。举个最好的例子,如果我们把学信息学的一些学生调去学数学,那么两个竞赛的学生平均IQ都会提升。现在给出一群数学竞赛全体学生的IQ和信息学竞赛全体学生的IQ,问最多能把几个学信息学的学生调去学数学,而两个竞赛的学生平均IQ都有提升呢?

每次只调一个学生,而且每次调配,两个竞赛的学生平均IQ都要提升。

【输入】

第1行,一个正整数N(N<=100),代表数学竞赛班学生的数目。

第2行,有N个正整数,代表每个数学学生的IQ(1-200之间)。

第3行,一个整数M(M<=100),代表信息学竞赛班学生数目。

第4行,有M个正整数,代表每个信息学竞赛班学生的IQ(1-200之间)。

输入数据保证信息学学生平均IQ高于数学学生。

【输出】

一个正整数,代表能从信息学调去学数学的学生的个数。

 

 

【输入输出样例1】

iq.in

iq.out

3

3 2 3

3

3 2 5

1

 

 

 

题目自编。

这题的思路是枚举信息的每一个人,看看这个人加入了数学的里面后是不是两个竞赛的平均分都增加了;判断(a1/n<b[i]&&b1/m>b[i]) ,然后把人数-1和+1,直到所有多判断完了累加交换个数。

 

 

 

3.yjh家的树

  (eko.pas/c/cpp)

【问题描述】

 

    yjh家有万亩树林,他的好朋友cz需要一些木头,于是yjh指定了N棵树,每棵都有一个整数高度。cz需要的木头的总需要量为M。 现在需要确定一个最大的统一的砍树高度H,如果某棵树的高度大于H,则高出的部分被砍下。使得所有被砍下的木材长度之和达到M(允许稍超过M)。

例如,有4棵树,高度分别是20 15 10 17,需要的木材长度为 7,砍树高度为15时,第1棵树被砍下5,第4棵树被砍下2,得到的总长度为7。如果砍树高度为16时,第1棵树被砍下4,第4棵树被砍下1,则得到的木材数量为5。给定N和M,请你编程帮杨佳涵和陈卓求出砍树的高度 H。

 

【输入】

第1行:2个整数N和M,N表示树木的数量(1 ≤ N ≤ 1 000 000),M表示需要的木材总长度(1 ≤ M ≤ 2 000 000 000)。

第2行: N个整数表示每棵树的高度,值均不超过1  000  000  000。所有木材高度之和大于M,因此必然有解。

【输出】

第1行:1个整数,表示砍树的最高高度。

 

【输入输出样例1】

eko.in

eko.out

5 20
4 42 40 26 46

 

36

  

 

这题数据小,暴力就行了;

 

第一题:

 

 

 

 

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[1000],b[1000],s=0,a2=0,b2=0,n1=0,m1=0;
double a1=0,b1=0,a3=0,b3=0;
int main()
{
	cin>>n; for(int i=1;i<=n;i++)  {cin>>a[i]; a1+=a[i];}
	cin>>m; for(int i=1;i<=m;i++)  {cin>>b[i]; b1+=b[i];}
	m1=m;
	sort(b+1,b+1+m);
	for(int i=1;i<=m1;i++)
		if(a1/n<b[i]&&b1/m>b[i]) 
		{
			n++; m--; s++;
			a1+=b[i]; b1-=b[i]; 
		}
	cout<<s<<endl;
	return 0;
	
}

 

 

 

 

 

 

 

第三题:

 

 

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[2000000]={},x=0,s=0,max1=-1000,i,num1=0;
int main()
{
	cin>>n>>m;
	for(i=1;i<=n;i++) 
	{
		cin>>x;
		if(x>=max1) max1=x;
		a[x]+=1;
	}
	for(i=max1;num1<m;i--)
	{
		s+=a[i];
		num1+=s;
	}
	cout<<i;
	return 0;
}

 

 

 

 

 

   

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值