首页 > 其他分享 >360 9.14笔试

360 9.14笔试

时间:2024-09-14 20:03:25浏览次数:10  
标签:pox nums int 9.14 笔试 ++ ind 360 left

第二题大模拟真的有点折磨了

第一题

给出m种饮料,每种饮料只有一杯,接下来有n个客人,每个客人有两种想喝的饮料,请问最多能满足多少位客人。
数据范围比较小n = 20,所以直接暴力求解

#include<bits/stdc++.h>  
using namespace std;  
int main() {  
    int n,m;  
    cin >> n >> m;  
    int res = 0;  
    vector<int> ind(m + 1, 0);  
    vector<vector<int>> nums;  
    for (int i = 0; i < n; i++) {  
        int a,b;  
        cin >> a >> b;  
        nums.push_back(vector<int>{a,b});  
    }  
    function<void(int,int)> dfs = [&] (int pox, int now) {  
        if (pox == n) {  
            res = max(res, now);  
            return;  
        }  
        if (ind[nums[pox][0]] == 0 && ind[nums[pox][1]] == 0) {  
            ind[nums[pox][0]] = 1;  
            ind[nums[pox][1]] = 1;  
            dfs(pox + 1, now + 1);  
            ind[nums[pox][0]] = 0;  
            ind[nums[pox][1]] = 0;  
        }  
        dfs(pox + 1, now);  
    };  
    dfs(0, 0);  
    cout << res;  
    return 0;  
}

第二题

给出T个方程,允许在每个方程中添加至多一位数字,询问每个方程是否成立。
给定的方程中只有“+*="和数字三种符号。T至多为10,每个方程的长度至多为1000。
以下解法只通过82% Runtime Error

  1. 枚举对应的插入位置
  2. 根据等号拆分开
  3. 模拟进行表达式的计算
#include <bits/stdc++.h>  
using namespace std;  
int cacu(string s) {  
    int n = s.length();  
    stack<int> st;  
    int pox = 0;  
    int left = 0;  
    while (pox < n) {  
        while (pox < n && s[pox] != '+' && s[pox] != '*') {  
            pox++;  
        }  
        long long tmp = stoi(s.substr(left, pox - left));  
        left = pox + 1;  
        while (pox < n && s[pox] == '*') {  
            pox++;  
            while (pox < n && s[pox] != '+' && s[pox] != '*') {  
                pox++;  
            }  
            int tmp2 = stoi(s.substr(left, pox - left));  
            left = pox + 1;  
            tmp = tmp * tmp2;  
        }  
        st.push(tmp);  
        pox++;  
    }  
    long long res = 0;  
    while (!st.empty()) {  
        res += st.top();  
        st.pop();  
    }  
    return res;  
}  
bool scheck(string s) {  
    int epox = 0;  
    while (s[epox] != '=') {  
        epox++;  
    }  
    string s1 = s.substr(0, epox);  
    string s2 = s.substr(epox + 1);  
    if (cacu(s1) == cacu(s2)) return true;  
    else return false;  
}  
const char chars[]{'0','1','2','3','4','5','6','7','8','9'};  
int main() {  
    int T;  
    cin >> T;  
    for (int p = 0; p < T; p++) {  
        string s;  
        cin >> s;  
        scheck(s);  
        int len = s.length();  
        if (scheck(s)) {  
            cout << "Yes" <<endl;  
            continue;  
        }  
        bool flag = false;  
        for (int i = 0; i < 10 && (!flag); i++) {  
            for (int j = 0; j <= len && (!flag);j++) {  
                string tmp1 = s.substr(0, j);  
                string tmp2 = s.substr(j);  
                string s1 = tmp1 + chars[i] + tmp2;  
                if (scheck(s1)) flag = true;  
            }  
        }  
        if (flag) cout << "Yes" <<endl;  
        else cout << "No" <<endl;  
    }  
    return 0;  
}  

标签:pox,nums,int,9.14,笔试,++,ind,360,left
From: https://www.cnblogs.com/tanch25/p/18414608

相关文章

  • 虾皮9.14笔试
    三道都是简化的板子题第一题给出每个位置的过路费,求从左上角到右下角的最小花费是多少。只允许往下或者往右走。数据范围只有100直接暴力搜索即可。intminPathSum(vector<vector<int>>&grid){intm=grid.size();intn=grid[0].size();intres=......
  • 南沙C++noip老师解一本通题: 1360:奇怪的电梯(lift)
    ​【题目描述】大楼的每一层楼都可以停电梯,而且第i层楼(1≤i≤N)上有一个数字Ki(0≤=Ki≤=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:33125代表了Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到4......
  • 京东9.14笔试
    被美团挂的第二天早上神志不清,第三题写错了距离计算函数,人麻了第一题将数组划分成两个区间,要求区间和乘积最小。经典的前缀和+枚举即完成#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+5;inth[N];intmain(){intn;cin>>n;......
  • 滴滴9.13笔试
    难度不大,第二题的\(O(n)\)带有一点思维第一题滑动窗口板子题:求和不超过m的最大区间长度#include<bits/stdc++.h>usingnamespacestd;intmain(){intn;longlongm;cin>>n>>m;vector<int>nums;for(inti=0;i<n;i++)......
  • 笔试常用api
    常用apiArrayList:List接口publicbooleanadd(Ee):将指定的元素添加到此集合的尾部。publicbooleanaddAll(collection对象):将collection的对象加入到publicEremove(intindex):移除此集合中指定位置上的元素。返回被删除的元素。publicEget(intindex):返回此集......
  • 美团笔试2024秋1
    1、图染色法在编译原理中,寄存器分配是代码优化阶段的一项重要任务。寄存器分配的目标是为了有效地将程序中的活跃变量映射到有限数量的处理器寄存器上。在这个过程中,图染色法是一种常用的技术,它通过构建一个冲突图(其中节点代表活跃变量,边代表不能同时分配到同一寄存器的变量对......
  • 9.14 模拟赛
    A.矩形小C有一个\(n\timesn\)的矩阵,每个格子有一个颜色\(a_{i,j}\len\)。给定\(k\),你需要计算出对于所有格子,以这个格子为左上角的最大正方形,满足内部颜色数量不超过\(k\)。\(n\le500\)。枚举左上角\(i,j\),二分正方形的边长,然后用\(|a|\)的复杂度求这个正......
  • 2024.09.14模拟赛总结
    $T1$似乎是签到题,但是没开$unsigned$$long$$long$挂成$88$分了。直接模拟即可,从后往前考虑,将每个数放到离其最近的位置,不过不会证...#include<bits/stdc++.h>usingnamespacestd;typedefunsignedlonglongLL;constintN=1000010;structwasd......
  • 2024.9.14
    1.如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。2.访问数组中的元素是常数时间操作,或说O(1)操作。一个算法如果能在每个步骤去掉一半数据元素,如二分检索,通常它就取O(logn)时间。用strc......
  • Java笔试面试题AI答之单元测试JUnit(4)
    文章目录19.简述JUnitorg.junit.TestSuite类的作用?1.组织测试类2.简化测试执行3.灵活配置测试环境4.嵌套测试套件注意事项20.在JUnit中@Test注释的作用和用法?作用用法21.简述Junit基础注解(@BeforeClass、@Before、@Test、@After、@AfterClass)?22.编写代......