牛客寒假算法基础集训营6学习笔记

出题

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

输入描述:
两个正整数n,m

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

一道数学题;
首先可以判断出一种显然无解的情况,即总分大于全为9分或总分小于全为6分。
由此可以得到启发,我们可以枚举全取某一道题的情况,得出该情况的总分,与实际总分对比。比如按照样例,我们全取7分的话,是35分,而实际是34分,很明显的必须出现一道6分题,才能取到34分。

由此,做法就明确了,当总分大于等于全取7分时就为0道,小于时做差即可,无解的情况早已给出(上方)

代码如下(注意数据范围。。。)

#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long n,m;
    cin >> n >> m;
    if((n<m*6)||(n>9*m))cout << "jgzjgzjgz" << endl;
    else if(n>=7*m)cout << 0 << endl;
    else cout << (m*7)-n << endl;
    return 0;
}

煤气灶

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

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

输出描述:
一个数表示答案

又是一道数学题 解二元一次不等式,用二分法确定(暴力好像不行。。。)

代码如下:

#include <bits/stdc++.h>
using namespace std;
long long n,d,x,m;
long long fun(long long g)
{
    return d*g*g+(2*n-d)*g-2*m;
}
int main()
{
    int h,r,l;
    cin >> n >> m >> d >> x;
    r=1,l=x;
    h=(r+l)/2;
    while(1)
    {
        h=(r+l)/2;
        if(fun(h)<0)r=h;
        else l=h;
        if(fun(h-1)<0&&fun(h)>=0)break;
    }
    //cout << fun(h) << ' ' << fun(h-1) << endl;
    cout << h << endl;
    return 0;
}

项链

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

输入描述:
第一行两个数n,m 第二行m个数a_i 第三行m个数b_i

输出描述:
一个数表示答案

个人觉得是最简单的一道了,贪心;
优先染喜爱度高的即可,唯一的知识点是结构体的排序,自己写一个cmp函数即可;

代码如下:

#include <bits/stdc++.h>
using namespace std;
struct zhuzi
{
    int a,b;
}z[100001];
bool cmp(zhuzi x,zhuzi y)
{
    return x.b>y.b;
}
int main()
{
    int n,m;
    long long ans=0;
    cin >> n >> m;
    for(int i=0;i<m;i++)
    {
        cin >> z[i].a;
    }
    for(int i=0;i<m;i++)
    {
        cin >> z[i].b;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值