华为OJ题目:刷题

时间:2021-10-21 12:02:18

题目描述:

新入职华为的小伙伴们都有在oj上面刷题的任务,共需要刷100道初级题,45道中级题,5道高级题,其中,做出来的高级题如果超标可以当初级或者中级题,做出来的中级题如果超标可以当初级题。每天,出题的大哥会给大家出Xi道题,这Xi道题属于同一个难度级别,小伙伴们要么用一天时间把这些题全做出来,要么就不做。现在,给你每天出题大哥出的题数以及难度,请问,小伙伴们最少要挑选其中几天去做题,才能把这150道题的任务完成呢?

输入示例:

5
100 70 5 5 55
1 2 2 2 3

输出:

 

表示两天就可以完成。

自己的解决思路:

这个题目的难点在于高难度的题目可以当做低难度的题目。
现将所有的题目按难度进行分类,并对每一类进行从大到小的排序。
首先,先做难度3的题目,如果难度三的题目搞定了 ,再将剩下的难度二和难度三的题目进行排序。在此基础上,再做难度二的。做完难度二以后,再将剩下的所有题目进行排序。在此基础上再做难度一的题目。
 
实现代码:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
#define LOWLEVEL 100
#define MIDLEVEL 45
#define UPLEVEL 5
bool MoreThan(int a,int b)
{
return a > b;
}
int theMax(int a,int b,int c)
{
return (a>b?(a>c?a:c):(b>c?b:c));
}
void display(char* str,vector<int> &src)
{
int i,n;
n = src.size();
cout<<str<<" : ";
for (i = 0; i < n; i++)
{
cout<<src[i]<<" ";
}
cout<<endl;
}
void OJDoWorks(int days,vector<int> &numbers,vector<int> &nandu)
{
int i,n;
int dayOver,flagu,flagm,flagl;
int lowsum,midsum,upsum;
vector<int> lowv, midv, upv,sortv,sortlv;
n = numbers.size();
flagl = flagm = flagu = -1;
lowsum = midsum = upsum = dayOver = 0;
//将题目进行分类
for (i = 0; i < n; i++)
{
if (nandu[i] == 1)
{
lowv.push_back(numbers[i]);
}
else if (nandu[i] == 2)
{
midv.push_back(numbers[i]);
}
else
{
upv.push_back(numbers[i]);
}
}
//按大小进行排序
sort(upv.begin(),upv.end(),MoreThan);
sort(midv.begin(),midv.end(),MoreThan);
sort(lowv.begin(),lowv.end(),MoreThan); display("up",upv);
display("mid",midv);
display("low",lowv);
n = theMax(upv.size(),midv.size(),lowv.size()); //先把高级的做满
for(i = 0; i < upv.size();i++)
{
dayOver++;
upsum += upv[i];
if (upsum >= UPLEVEL)
{
flagu = i;
break;
}
}
//高级题目不够
if (flagu < 0)
{
return;
}
midsum = upsum - UPLEVEL;
//将剩下的高级和中级的题目进行排序
for (i = flagu+1; i< upv.size(); i++)
{
sortv.push_back(upv[i]);
}
for (i = 0; i < midv.size(); i++)
{
sortv.push_back(midv[i]);
}
sort(sortv.begin(),sortv.end(),MoreThan);
display("sort mid:",sortv);
//再把中级的做满
n = sortv.size();
for (i = 0; i < n; i++)
{
if (midsum >= MIDLEVEL)
{
flagm = i;
break;
}
dayOver++;
midsum += sortv[i];
}
//中级题目数量不够
if (flagm < 0)
{
return;
}
lowsum = midsum - MIDLEVEL;
//再做低级的题目
for ( i = flagm; i < n; i++)
{
sortlv.push_back(sortv[i]);
}
for (i = 0; i < lowv.size(); i++)
{
sortlv.push_back(lowv[i]);
}
sort(sortlv.begin(),sortlv.end(),MoreThan);
display("sort low",sortlv);
n = sortlv.size(); for (i = 0; i < n; i++)
{
if (lowsum >= LOWLEVEL)
{
flagl = i;
break;
}
dayOver++;
lowsum += sortlv[i];
}
if ((upsum >= UPLEVEL) && (midsum >= MIDLEVEL) && (lowsum >= LOWLEVEL))
{
cout<<dayOver<<endl;
}
else
{
return;
}
}
int main()
{
//fstream in("data.txt");
int n,i,value;
vector<int> numbers,nandu; cin>>n;
for (i = 0; i < n; i++)
{
cin>>value;
numbers.push_back(value);
}
for (i = 0; i < n; i++)
{
cin>>value;
nandu.push_back(value);
}
OJDoWorks(n,numbers,nandu); cout<<endl;
return 0;
}

  

华为OJ题目:刷题的更多相关文章

  1. 华为OJ题目:扑克牌大小

    题目描述: 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A.2各4张,小王1张,大王1张.牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3  ...

  2. 好像leeceode题目我的博客太长了&comma;需要重新建立一个&period; leecode刷题第二个

    376. Wiggle Subsequence               自己没想出来,看了别人的分析. 主要是要分析出升序降序只跟临近的2个决定.虽然直觉上不是这样. 455. 分发饼干     ...

  3. Sublime Text3 配置C&plus;&plus;&lpar;附oj刷题常用模板&rpar;

    # 下载对应平台的sublime sublime最新版下载, 字体样式个人喜欢Consolas, 另附注册码: -– BEGIN LICENSE -– TwitterInc 200 User Lice ...

  4. OJ——华为编程题目:输入字符串括号是否匹配

    package t0815; /* * 华为编程题目:输入字符串括号是否匹配 * 若都匹配输出为0,否则为1 * 样例输入:Terminal user [name | number (1)] * 样例 ...

  5. 小米OJ刷题日志

    虽然这OJ上的题比较水,但还是挺有意思的.关键是能赚钱 特别是提交方式 居然不支持C++,垃圾OJ 4. 最长连续数列 排序后dp 5. 找出旋转有序数列的中间值 写个排序就做完了. 6. 交叉队列 ...

  6. XidianOJ 1020 ACMer去刷题吧

    题目描述 刷题是每个ACMer必由之路,已知某oj上有n个题目,第i个题目小X能做对的概率为Pi(0<=Pi<=1,1<=i<=n) 求小X至少做对k道题的概率 输入 第一行输 ...

  7. 【BZOJ-4590】自动刷题机 二分 &plus; 判定

    4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 156  Solved: 63[Submit][Status ...

  8. BZOJ4590 自动刷题机

    Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写 ...

  9. HDU 自动刷题机 Auto AC (轻轻松松进入HDU首页)

    前言: 在写这篇文章之前,首先感谢给我思路以及帮助过我的学长们 以下4篇博客都是学长原创,其中有很多有用的,值得学习的东西,希望能够帮到大家! 1.手把手教你用C++ 写ACM自动刷题神器(冲入HDU ...

随机推荐

  1. Django的virtualenv环境搭建

    安装virtualenv好处多多,可以让当前的项目使用单独的类库,实现系统类库的隔离,所以能够*地控制当前项目类库的版本,不受系统类库的影响:还有其他N多好处. 下面是安装说明和使用示例: 首先安装 ...

  2. Unity3D着色器Shader编程入门(一)

    自学Unity3D也有大半年了,对Shader一直不敢入坑,最近看了些资料,以及通过自己的实践,对Shader还是有一点了解了,分享下仅作入门参考. 因Shader是对图像图像渲染的,学习前可以去了解 ...

  3. linux spi驱动开发学习-----spidev&period;c和spi test app

    一.spidev.c文件 看一个设备驱动的方法: module_init标识的入口初始化函数spidev_init,(module_exit标识的出口函数) 设备与设备驱动匹配时候调用的probe方法 ...

  4. IIS本地部署项目出错

    今天,打开部署在本地IIS的项目发现出错了.报的错,跟没有连接网络一样的.我当时有点懵,过一会儿再静下心来,想想这是什么原因. 第一步,把所有部署的项目,都打开看了一下,方便找出对比. 发现,绑定了I ...

  5. Linux -atime、mtime、ctime

    Linux中,文件都有其自身的atime.mtime.ctime,在不同的命令下,各时间发生相应的改变.下面,我们来简单的介绍一下: atime (access time):表示最后一次访问文件或目录 ...

  6. 解决VMware下安装Ubuntu 16&period;04 不支持1920X1080分辨率的问题

    解决方法: flashmx@ubuntu:~$ cvt # 192.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz Modeline -hsync +vsync fl ...

  7. Go 1&period;9 sync&period;Map揭秘

    Go 1.9 sync.Map揭秘 目录 [−] 有并发问题的map Go 1.9之前的解决方案 sync.Map Load Store Delete Range sync.Map的性能 其它 在Go ...

  8. Mother&&num;39&semi;s Mil 母亲的牛奶

    Description 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装 ...

  9. SAP&lpar;ABAP&rpar; ABAP内部外部数据转换常用function

    文本相关CONVERSION_EXIT_CUNIT_OUTPUT      将内部单位转为单位文本CONVERSION_EXIT_ISOLA_OUTPUT      根据语言代码取文本CONVERSI ...

  10. 关于人脸识别引擎FaceRecognitionDotNet的实例

    根据我上篇文章的分享,我提到了FaceRecognitionDotNet,它是python语言开发的一个项目face_recognition移植.结果真是有喜有忧,喜的是很多去关注了,进行了下载,我看 ...