1. 程式人生 > >*牛客集訓營第六場補題(未完結)

*牛客集訓營第六場補題(未完結)

status pre 現在 需要 href sin cmp 規模 sync

題目鏈接:

題號標題已通過代碼
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,m1012

描述說明:

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

備註:

0n,d10^9,n+d>0
1m10^18
1x10^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

備註:

1n,m10^5,0ai,bi10^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;
}

  

 

*牛客集訓營第六場補題(未完結)