呜呜,吊点了~o(╥﹏╥)o
在考试之前,怎么估摸着能写一道简单题,结果没想到的是,自己太异想天开了。
华为总共分三题:简单 中等 困难
分数: 100 200 300
第一题,题目就给我看懵了,题目简述如下:
现有芯片可以走A,B两种业务,芯片对业务容量的约束如下:
【1】A业务容量为2.5G,一个芯片可以配4个该业务;
【2】B业务容量为10G,一个芯片可以配1个该业务;
【3】该芯片配置了业务A就不能配置业务B;
【4】不能跨芯片占用资源,不能既占用一块芯片,又占用另一块芯片;
【5】保证最少芯片资源,从小到大按芯片编号配置,且优先使用已经用了的芯片。
业务容量最小为2.5G,以该容量为单位,一个芯片化为4个资源区,资源区编号为1,2,3,4.
现在有M块芯片,用户经过配置后,求输出的最后一块芯片对应的芯片编号以及芯片资源ID。
没有可用的资源返回0,0;当正好用B芯片占用一块芯片时,资源ID为1。
————————————————分割线——————————————————————
就这第一道题,逛理解就花了我近20分钟,结果终于花了半小时写完了代码,一敲进去,告诉我只通过了85%!于是,心想这应该很容易调吧,暂时先放弃,看看第三题,因为第三题好像以前写到过~
————————————————分割线——————————————————————
第三题
在一棵二叉树中找出完全相同的两棵子树(子树层数必须大于或者等于2)。如果存在多对子树完全相同,返回层数最大的子树,不存在就输出“-1”。
——————————————————分割线————————————————————
于是一顿操作猛如虎,又是创建树,又是搞个遍历,又是dfs的,结果一检测,编译失败!!!而此时又浪费了我30分钟,因为贼心不死,又找了10分钟左右的错误,发现代码是在太长了,自己都快看花了,啥也没改出来,还是返回做第一题吧.....至此,我的心凉了大半
————————————————分割线——————————————————————
本来想着,第一题调试很简单,一开始在官方的调试里捣鼓半天没搞出什么玩意,然后导入自己本地的IDE,终于发现有一个样例没过,就是 0 0 这个边界没能判断正确。可能一时心急,最后只有5分钟了,还是没能改出来。
气人的是,一切都结束的时候,知道哪里出问题了!!
——————————————————总结——————————————————————
此次考试给了我当头一棒,可以说是满盘皆输了,总结了一下失败的原因:
1.题目还是得多刷,思路还不够打开;
2.时间把握,以及题目安排上没能做好合理计划,最起码 cout 样例就能得到一部分分数,而我却没有变通;
————————————————————回顾————————————————————
今天,把第一题改出来了:这次应该没错了,虽然已经晚了,哎
#include<iostream>
#include<vector>
using namespace std;
int num1;//芯片数量
int num2;//任务数量
char tasktype;//任务种类
void deal(vector<char>tk, int num2,int num1)
{
vector<int>xp(num1, 4);
//计数
int countA = 0;
int countB = 0;
//位置
int w1 = 0;//芯片位置
int w2 = 0;//资源ID位置
for (char cc : tk)
{
if (cc == 'A')countA++;
if (cc == 'B')countB++;
}
if (countA + countB * 4 > num1 * 4)
{
cout << 0 << endl;
cout<< 0 << endl;
}
else
{
for (int i = 0; i < num2; i++)
{
for (int j = 0; j < num1; j++)
{
if (xp[j] != 0 && tk[i] == 'A')
{
xp[j]--;
w1=j+1;
w2 = 4 - xp[j];
break;
}
else if (xp[j] == 0 && tk[i] == 'A')
continue;
else if (xp[j] == 4 && tk[i] == 'B')
{
xp[j] = 0;
w1=j+1;
w2 = 1;
break;
}
else if (xp[j] != 4 && tk[i] == 'B')
continue;
}
}
cout << w1 << endl;
cout << w2 << endl;
}
}
int main()
{
while (cin >> num1 >> num2)
{
vector<char>task;
for (int i = 0; i < num2; i++)
{
cin >> tasktype;
task.push_back(tasktype);
}
deal(task,num2,num1);
}
return 0;
}