首页 > 其他分享 >华为机考复盘

华为机考复盘

时间:2024-05-13 20:58:24浏览次数:25  
标签:num1 num2 int else cache 复盘 华为 机考 order

A.设计一种虚拟机解释器,解析并执行以下虚拟指令。

输入:若干行,每行一条指令

输出:对输入的每行指令,若为PRINT指令,则输出打印一行,该行中包括一个整数,表示寄存器的值

#include <bits/stdc++.h>
using namespace std;
vector<int> dst(32,0);//32位整型寄存器
int main(){
    string s;
    while(getline(cin,s)){
        stringstream ss(s);
        vector<string> order;
        string t;
        while(ss >> t){
			order.push_back(t);
        }
        if(order[0]=="MOV"){
            if(order[2][0]=='a'){
				dst[order[1][1]-'0']=dst[order[2][1]-'0'];
            }else{
                dst[order[1][1]-'0']=stoi(order[2]);
            }
        }else if(order[0]=="ADD"){
            int num1 =0;
            int num2 =0;
            if(order[2][0]=='a'){
				num1 = dst[order[2][1]-'0'];
            }else{
                num1 = stoi(order[2]);
            }
            if(order[3][0]=='a'){
                num2 = dst[order[3][1]-'0'];
            }else{
                num2 = stoi(order[3]);
            }
            dst[order[1][1]-'0']=num1+num2;
        }else if(order[0]=="SUB"){
            int num1 =0;
            int num2 =0;
            if(order[2][0]=='a'){
				num1 = dst[order[2][1]-'0'];
            }else{
                num1 = stoi(order[2]);
            }
            if(order[3][0]=='a'){
                num2 = dst[order[3][1]-'0'];
            }else{
                num2 = stoi(order[3]);
            }
            dst[order[1][1]-'0']=num1-num2;
        }else if(order[0]=="MUL"){
            int num1 =0;
            int num2 =0;
            if(order[2][0]=='a'){
				num1 = dst[order[2][1]-'0'];
            }else{
                num1 = stoi(order[2]);
            }
            if(order[3][0]=='a'){
                num2 = dst[order[3][1]-'0'];
            }else{
                num2 = stoi(order[3]);
            }
            dst[order[1][1]-'0']=num1*num2;
        }else if(order[0]=="DIV"){
            int num1 =0;
            int num2 =0;
            if(order[2][0]=='a'){
				num1 = dst[order[2][1]-'0'];
            }else{
                num1 = stoi(order[2]);
            }
            if(order[3][0]=='a'){
                num2 = dst[order[3][1]-'0'];
            }else{
                num2 = stoi(order[3]);
            }
            dst[order[1][1]-'0']=num1/num2;
        }else if(order[0]=="PRINT"){
            cout << dst[order[1][1]-'0']<<endl;
        }
    }
}

B.无线通信移动性需要在基站上配置邻区(本端基站的小区LocalCell与周边邻基站的小区NeighborCelI映射)关系,为了能够加速无线算法的计算效率,设计一个邻区关系缓存表,用于快速的通过本小区LocalCell查询到邻小区NeighborCell。但是缓存表有一定的规格限制,因此到达规格并且需要插入新的数据时,需要删除邻区数据,选择删除邻区数据对象的策略为:

(1)使用次数最少的;LFU

(2)如果(1)返回有多个对象,则选择最久未使用的。LRU

哈希表用以查找元素和判断当前缓存表是否满,同时判断写入的元素是否存在当前缓存表中

红黑树set用以对当前缓存表的元素进行排序,按照使用次数或使用时间,便于在缓存表满的时候写入新元素时删除元素

#include <bits/stdc++.h>

using namespace std;

//定义复合数据结构
struct Node{
    int cnt;//表示节点被访问的次数
    int tim;// 表示节点最近一次被访问的时间
    int key;//节点的键,标识缓存项
    int value;//节点的值,缓存项的数据内容
    Node() {}
    Node(int a,int b,int c, int d):cnt(a),time(b),key(c),value(d){}
    bool operator < (const Node& nod) const{//定义'<'运算符重载函数,用于比较两个'Node'对象的大小
        return cnt == nod.cnt? tim < nod.tim : cnt < nod.cnt;
    }
};
int n;//确定缓存容量
int tim=0;
unordered_map<int,Node> mapp;//实现快速查找
set<Node> S;//红黑树实现元素按照(cnt,time)排序,用以删除最少使用或最少使用且最久未使用的缓存项

//读取元素
int get(int key){
	if(n==0 || mapp.find(key)==mapp.end()){
        return -1;
    }
    Node cache = mapp[key];
    S.erase(cache);
    cache.cnt ++;
    cache.tim = ++tim;
    S.insert(cache);
    mapp[key] = cache;
    return cache.value;
}
//写入元素
void put(int key, int value){
    if(n == 0) return;
    auto it = mapp.find(key);
    if(it == mapp.end()){//当前元素不存在于缓存表中
        if(mapp.size() == n){//删除哈希表和红黑树中使用次数最小或者使用次数最小且最久未使用的元素
            mapp.erase(S.begin()->key);
            S.erase(S.begin());
        }
        Node cache = Node(1,++tim,key,value);
        mapp[key] = cache;
        S.insert(cache);
    }else{//缓存表中已存在该元素
        Node cache = it->second;
        S.erase(cache);
        cache.cnt += 1;
        cache.tim = ++tim;
        cache.value = value;
        S.insert(cache);
        it->second = cache;
    }
}

int main(){
    string s;
    cin >> s;
    cin >> n;
    int x;
    while(cin >> s){
        if(s[0]=='w'){
			int m;
            cin >> m;
            while(m--){
				int a,b;
                cin >> a >> b;
                put(a,b);
            }
        }else if(s[0]=='r'){
            cin >> x;
            get(x);
        }else while(cin >> x){
            if(mapp.count(x)) cout << mapp[x].value<< endl;
            else cout << -1 <<endl;
        }
    }
}

标签:num1,num2,int,else,cache,复盘,华为,机考,order
From: https://www.cnblogs.com/perngfey-note/p/18189897

相关文章

  • 华为S5700交换机配下链路聚合
    学习目标  ·掌握接口速率的配置方法·掌握使用手动模式配置链路聚合的方法·掌握使用静态LACP模式配置链路聚合的方法·掌握在静态LACP模式下配置接口优先级的方法 拓扑图   图4.1以太网链路聚合拓扑图 场景 您是公司的网络管理员。现在公司购买了两......
  • 24年5.12流片复盘
    非常值得纪念的一天,因为去年这个时候流片delay,今年顺利流出去了,这是一个大的进步,但是还是要做复盘。首先是进度整体上的复盘。这次流片从一月初开始进行规划,到五月初投片,总共花费五个月时间,五个月内,按照最初的时间规划,一月是把规划基本都做完,给项目参与人员一段上手熟悉任务的时......
  • ABC 261 复盘
    ABC261复盘[ABC261A]Intersection思路解析因为这题czl错了所以我特地来写个复盘可以想到两条线段的关系只有不相交,相交,包围三种,于是我们可以直接判断每种情况然后输出就好了,可以在判断前先将两条线段的位置判断一下交换方便之后操作。#include<bits/stdc++.h>usingnames......
  • 华为云发布CodeArts IDE for Python,极致优雅云原生开发体验
    近日,华为云正式发布CodeArtsIDEforPython,这是一款内置华为自主创新的Python语言服务,提供智能编程、灵活调试能力的可扩展桌面开发工具,为华为云开发者提供卓越Python编码体验。Python作为一种编程语言,广泛用于Web应用程序、软件开发、数据科学和机器学习(ML)。Python以其优......
  • 华为交换机的基本查询命令
    displayiprouting-table该命令用于显示交换机的路由表信息。通过该命令,管理员可以查看交换机的路由表,包括默认路由、静态路由、动态路由等。displayinterfacebrief该命令用于显示交换机接口的基本信息。通过该命令,管理员可以查看交换机接口的状态、IP地址、子网掩码等......
  • 华为云开发者桌面全新发布CodeArts IDE for Python,极致优雅云原生开发体验
    本文分享自华为云社区《华为云发布CodeArtsIDEforPython,极致优雅云原生开发体验》,作者:华为云头条。近日,华为云正式发布CodeArtsIDEforPython,这是一款内置华为自主创新的Python语言服务,提供智能编程、灵活调试能力的可扩展桌面开发工具,为华为云开发者提供卓越Python编码体验......
  • 【爬虫】项目篇-使用selenium、requests爬取天猫“华为手机”的商品评价
    目录使用selenium使用requests使用seleniumfromselenium.webdriverimportChrome,ChromeOptionsfromselenium.webdriver.support.waitimportWebDriverWaitfromselenium.webdriver.common.byimportByfromselenium.webdriver.supportimportexpected_conditionsasE......
  • 是面试官放水,还是公司实在是太缺人?这都没挂,华为原来这么容易进...
    华为是大企业,是不是很难进去啊?”“在华为做软件测试,能得到很好的发展吗?一进去就有9.5K,其实也没有想的那么难”直到现在,心情都还是无比激动!本人211非科班,之前在字节和腾讯实习过,这次其实没抱着什么特别大的希望投递,没想到华为可以再给我一次机会,还是挺开心的。本来以为有个机......
  • Redis开源社区持续壮大,华为云为Valkey项目注入新的活力
    摘要:作为Valkey社区的TechnicalSteeringCommitteemember,华为云将持续参与社区建设。一、背景今年3月21日,RedisLabs宣布从Redis7.4版本开始,将原先比较宽松的BSD源码使用协议修改为RSAv2和SSPLv1协议,意味着Redis在OSI(开放源代码促进会)定义下不再是严格的开源产品。Redis......
  • 华为USG6000防火墙WEB基本配置
    第一步:浏览器登录https://192.168.0.1 (缺省状态下WEB登录地址)进入防火墙WEB配置界面。 第二步:输入用户名和密码登录,用户名:admin密码:Admin@123(缺省状态下)。 第三步:进入快速向导,根据指引进行配置,然后点击【下一步】。 第四步:配置基本信息。(建......