其他分享
首页 > 其他分享> > *牛客集训营第六场补题(未完结)

*牛客集训营第六场补题(未完结)

作者:互联网

题目链接:

题号标题已通过代码
A 出题 点击查看
B 煤气灶 点击查看
C 项链 点击查看
D 美食 点击查看
E 海啸 点击查看
F 石头剪刀布 点击查看
G 区间或和 点击查看
H 肥猪 点击查看
I wzoi 点击查看
J 迷宫 点击查看

 

A:思维

题目描述

小B准备出模拟赛。
她把题目按难度分为四等,分值分别为6,7,8,9。
已知小B共出了m道题,共n分。
求小B最少出了多少道6分题。    

输入描述:

两个正整数n,m

输出描述:

一个数,表示答案。
若无解,输出"jgzjgzjgz"。

输入

34 5

输出

1

输入

32 5

输出

3

输入

5 1

输出

jgzjgzjgz

备注:

n,m≤1012

描述说明:

m道题n分,n/m>9||n/m<6  无解  ;只有用7还太大的时候才会用6,所以再判断m*7比总分大,说明要用6代替7,所以大多少就用多少6代替多少7;否则7,8,9就可以,输出0;

#include<iostream>
using namespace std;
int main()
{
	long long n, m;
	cin >> n >> m;
	if (n > 9 * m || n < 6 * m) {
		cout << "jgzjgzjgz\n";
	}
	else {
		if (m * 7 > n)cout << 7 * m - n << "\n";
		else cout << 0 << "\n";
	}
	return 0;
}

B:二分

题目描述

小j开始打工,准备赚钱买煤气灶。
第一天,小j的工资为n元,之后每天他的工资都比前一天多d元。
已知煤气灶需要m元,求小j最少工作几天才能买到煤气灶。

输入描述:

四个整数 n,m,d,x
分别表示小j第一天的工资,煤气灶的价格,工资每天的增长量,答案不超过x

输出描述:

一个数表示答案

输入

10 100 20 100

输出

4

说明

10+30+50+70>=100

备注:

0≤n,d≤10^9,n+d>0
1≤m≤10^18
1≤x≤10^9

描述说明:

数据规模比较大,枚举肯定超时,用二分就可以了,还有就是用long long

#include<iostream>
using namespace std;
long long n, m, d, x;
int cha()
{
	long long l = 1, r = x,aa=1;
	while (l <= r)
	{
		long long mid = (l + r) >> 1;
		if ((mid*(n+n+(mid - 1)*d)/ 2)  < m && ((mid + 1)*(n+n+mid*d) / 2) >= m) {
			aa = mid+1;
			break;
		}
		else if ((mid*(n+n+(mid-1)*d)/2)<m) l = mid+1;
		else r = mid-1;
	}
	return aa;
}
int main()
{
	cin >> n >> m >> d >> x;
	long long ans;
	ans=cha();
	cout << ans << endl;
	return 0;
}

  C:贪心,STL_sort_cmp

题目描述

小B想给她的新项链染色。
现在有m种颜色,对于第i种颜色,小B有a_i单位的颜料,每单位颜料可以染项链的一个珠子;
同时,小B对于第i种颜色的喜爱度为b_i。
已知项链有n个珠子,求染色后每个珠子的颜色的喜爱度之和的最大值。
(每个珠子只能至多被染一次,不被染色则喜爱度为0)    

输入描述:

第一行两个数n,m
第二行m个数a_i
第三行m个数b_i

输出描述:

一个数表示答案

输入

5 3
1 2 3
3 2 1

输出

9

输入

5 3
1 2 1
3 2 1

输出

8

备注:

1≤n,m≤10^5,0≤ai,bi≤10^6

描述说明:

贪心,定义一个结构体,从喜爱度由大到小排序.

#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
struct test {
	ll a;
	ll b;
}x[100010];
bool cmp(const test aa,const test bb)
{
	return aa.b > bb.b;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	long long n, m;
	long long ans = 0;
	cin >> n >> m ;
	for (int i = 0; i < m; i++)
		cin >> x[i].a;
	for (int i = 0; i < m; i++)
		cin >> x[i].b;
	sort(x, x + m, cmp);
	int i=0,j = 0;
	while (j < n&&i<m) {
		while (x[i].a > 0&&j<n&&i<m) {
			ans += x[i].b;
	//		cout << ans << " ";
			x[i].a--;
			j++;
		}
		i++;
	}
	cout << ans<<endl;
}

  

 

标签:10,第六场,查看,未完结,mid,long,点击,补题,描述
来源: https://www.cnblogs.com/52dxer/p/10352995.html