*牛客集训营第六场补题(未完结)
作者:互联网
题目链接:
题号 | 标题 | 已通过代码 |
---|---|---|
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