爱奇艺C++笔试代码

第三题是要笑死我……

第一题洗牌,用栈就可以解决,不过这破题目题干描述一点都不清楚,我照着用例测了半天才知道每一组牌都是往上叠……
#include <iostream>
#include <vector>
#include <stack>
using namespace std;

int main() {
    vector<int> inital(13, 0);
    for(int i = 0; i < 13; i++) {
        int tmp = 0;
        cin >> tmp;
        inital[i] = tmp;
    }
    
    int numbers = 0;
    cin >> numbers;
    vector<int> everycnt(numbers, 0);
    
    for(int i = 0; i < numbers; i++) {
        int tmp = 0;
        cin >> tmp;
        everycnt[i] = tmp;
    }
    vector<int> result = inital;
    for(int i = 0; i < numbers; i++) {
        stack<int> left;
        stack<int> right;
        for(int j = 0; j < everycnt[i]; j++) 
            left.push(result[j]);
        for(int j = everycnt[i]; j < 13; j++)
            right.push(result[j]);
        int cnt = 12;
        while(cnt >= 0) {
            if(!left.empty()) {
                result[cnt] = left.top();
                left.pop();
                cnt--;
            }
            if(!right.empty()) {
                result[cnt] = right.top();
                right.pop();
                cnt--;
            }
        }
    }
    for(int i = 0; i < 12; i++) {
        cout << result[i] << " ";
    }
    cout << result[12] << endl;
    return 0;
}
第二题,直接排个序,最大值减去第二大的值,然后最小值和中间值的差除二,她俩做和即可, O(1),一开始还觉得这个方法可能不太对劲,然而毫无悬念的AC了:
#include <iostream>
#include <vector>

using namespace std;
int main() {
    vector<int> nums(3, 0);
    for(int i = 0; i < 3; i++) {
         cin >> nums[i];
    }

    sort(nums.begin(), nums.end());
    int result = nums[2] - nums[1];
    result += ((nums[1] - nums[0]) & 1) ? ((nums[1] - nums[0]) / 2 + 2) : (nums[1] - nums[0]) / 2;

    cout << result << endl;
    return 0;
}

第三题, 统计甜点心的数目,除以二就能AC,不骗你……
解法就暴力就行……不过我懒得做……
#实习##C/C++##笔试题目#
全部评论
第一道题 愣是没看懂
点赞 回复 分享
发布于 2018-04-19 22:01
我想知道笔C++的大家都AC了几个啊
点赞 回复 分享
发布于 2018-04-19 21:48
所以。老铁,第三题你是空着了?
点赞 回复 分享
发布于 2018-04-19 21:23
老哥,我也是直接除以二就全通过了😂
点赞 回复 分享
发布于 2018-04-19 21:16
诶哟,这个洗牌是真的烦,做半天发现,是放到左手牌的上面,***.......
点赞 回复 分享
发布于 2018-04-19 21:09
第三题测试用例太那个啥了,直接输出0能通过20%(也就是说只有5个测试用例么=_,=) #include <iostream> #include <vector> #include <unordered_set> using namespace std; int N; // 点心数量 int M; // 不能放在一起的点心对的数量M vector<char> v; // N个点心 vector<pair<int, int>> pairs; // 不能同时出现的点心序号对 unordered_set<int> usK; int main() { // 读取输入 cin >> N >> M; v.resize(N); for (int i = 0; i < N; ++i) cin >> v[i]; for (int i = 0; i < M; ++i) { int tx, ty; cin >> tx >> ty; if (v[tx - 1] == 'K') usK.emplace(tx - 1); else usK.emplace(ty - 1); pairs.emplace_back(make_pair(tx, ty)); } int nT = 0, nK = 0, nS = 0; int cnt = 0; for (char ch : v) { if (ch == 'T') ++nT; else if (ch == 'K') ++nK; else if (ch == 'S') ++nS; } if (nT <= usK.size() * 2) { cnt += nT / 2; nT = 0; } else { cnt += usK.size(); nT -= usK.size() * 2; } cout << cnt << endl; return 0; } 这是我最后10分钟放弃治疗想的不靠谱代码(还是没写完的……),居然通过了所有测试用例,醉了醉了。正常的测试用例
点赞 回复 分享
发布于 2018-04-19 21:05
第一题愣是没看懂,题目说左右都要拿牌出来,输入描述那里又说将牌放到左边。。。。
点赞 回复 分享
发布于 2018-04-19 21:04
... 跑二分图只过了30%
点赞 回复 分享
发布于 2018-04-19 21:03
第三题匈牙利求酸和苦的最大匹配,最后考虑甜的
点赞 回复 分享
发布于 2018-04-19 21:03

相关推荐

评论
点赞
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务