题目描述
小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;