首页 > 8.22爱奇艺笔试代码(弱鸡)
头像
月夜面尊
编辑于 2021-08-22 18:04
+ 关注

8.22爱奇艺笔试代码(弱鸡)

1.女生数量SQL (ac)
select subi.name subject_name, count(*) girl_count
from Subject_Register sr
join Student_Info si
on sr.student_id = si.id
join Subject_Info subi
on sr.subject_id = subi.id
where si.gender = 2
group by subi.name
order by girl_count desc
limit 0,3;



2. 波峰波谷 AC
#include <bits/stdc++.h>

using namespace std;

void solve(vector<int>& nums)
{
    int len = nums.size();
    if(len < 2)
    {
        cout << 0 << endl;
        return;
    }
    bool up = nums[1] > nums[0];
    int minnum = nums[0], maxnum = nums[0];

    int res = 0;

    for(int i = 1; i < len; i++)
    {
        if(nums[i] < nums[i-1])
        {
            if(up == false)
            {
                minnum = min(minnum, nums[i]);
                maxnum = max(maxnum, nums[i]);
                res = max(res, abs(maxnum-minnum));
            }else{
                up = false;
                maxnum = nums[i-1];
                minnum = nums[i];
                res = max(res, abs(maxnum-minnum));
            }
        }else{
            if(up == true)
            {
                minnum = min(minnum, nums[i]);
                maxnum = max(maxnum, nums[i]);
                res = max(res, abs(maxnum-minnum));
            }else{
                up = true;
                maxnum = nums[i];
                minnum = nums[i-1];
                res = max(res, abs(maxnum-minnum));
            }
        }
    }
    cout << res << endl;
}

int main()
{
    string str;
    while(cin >> str)
    {
        vector<int> nums;
        int cur = 0;
        int num = 0;
        while(cur < str.size())
        {
            if(str[cur] == ',')
            {
                nums.push_back(num);
                num = 0;
            }else{
                num = num*10+str[cur]-'0';
            }
            cur++;
        }
        if(num!=0)
            nums.push_back(num);
        
        solve(nums);
        nums.clear();

    }

    return 0;
}

3. N皇后(做了多次,直接背过了,就是输入输出处理了好久,AC)
#include <bits/stdc++.h>

using namespace std;

vector<string> createBoard(vector<int>& queens, int n)
{
    vector<string> board;
    for(int i = 0; i < n; i++)
    {
        string row(n, '.');
        row[queens[i]] = 'Q';
        board.emplace_back(row);
    }
    return board;
}

void dfs(vector<vector<string>>& res,  vector<int>& queens, int n, int row, unordered_set<int>& cols, 
unordered_set<int> diags1,unordered_set<int> diags2)
{
    // 递归终止
    if(row == n)
    {
        auto board = createBoard(queens, n);
        res.push_back(board);
    }else{
        for(int i = 0; i < n; i++)
        {
            if(cols.count(i))
                continue;
            int diag1 = row - i;
            if(diags1.count(diag1))
                continue;
            int diag2 = row + i;
            if(diags2.count(diag2))
                continue;
            queens[row] = i;
            cols.insert(i);
            diags1.insert(diag1);
            diags2.insert(diag2);
            dfs(res,queens,n,row+1,cols,diags1,diags2);
            queens[row] = -1;
            cols.erase(i);
            diags1.erase(diag1);
            diags2.erase(diag2);
        }
    }


}

vector<vector<string>> solve(int n)
{
    vector<vector<string>> res;
    vector<int> queens(n,-1);
    unordered_set<int> cols;
    unordered_set<int> diag1;
    unordered_set<int> diag2;
    dfs(res, queens, n, 0, cols, diag1, diag2);
    return res;
}

int main()
{
    string str;
    cin >> str;
    int len = str.size() - 2;
    str = str.substr(2,len);
    int N = stoi(str);
    vector<vector<string>> res = solve(N);
    cout << "[";
    for(int k = 0; k < res.size(); k++)
    {
        auto& vec = res[k];
        cout << "[";
        for(int i = 0; i < vec.size()-1; i++)
            cout << vec[i] << ", ";
        cout << vec[vec.size()-1];
        cout << "]";
        if(k != res.size()-1)
            cout << ", ";
    }
    cout << "]";

    
    return 0;
}
4. 多线程输出。
#include <condition_variable>
#include <functional>
#include <iostream>
#include <memory>
#include <mutex>
#include <thread>

using namespace std;
class ZeroAndEvenOdd {
    private:
    bool ze; // 输出zero
    bool other; // 输出其他的
    int n; // 总共要输出的次数
    int count; // 输出总量
    int othercount; // 输出非0的总量
    std::condition_variable cv;
    std::mutex mtx;

    public:
    ZeroAndEvenOdd(int m) : ze(true), other(false), n(m), count(0), othercount(0){
        
    }

    // printNumber(x) outputs "x", where x is an integer.
    void printZero(std::function<void(int)> printNumber) {
        while(true)
        {
            unique_lock<mutex> lock(mtx);
            if(count >= 2*n)
                return;
            while(!ze)
                cv.wait(lock);
            printNumber(0);
            count++;
            ze = false;
            other = true;
            cv.notify_all();
            lock.unlock();
        }
    }

    void printEven(std::function<void(int)> printNumber) {
        while(true)
        {
            unique_lock<mutex> lock(mtx);
            if(count >= 2*n)
                return;
            while(!other)
                cv.wait(lock);
            printNumber(++othercount);
            count++;
            ze = true;
            other = false;
            cv.notify_all();
            lock.unlock();
        }
    }

    void printOdd(std::function<void(int)> printNumber) {
        while(true)
        {
            unique_lock<mutex> lock(mtx);
            if(count >= 2*n)
                return;
            while(!other)
                cv.wait(lock);
            printNumber(++othercount);
            count++;
            ze = true;
            other = false;
            cv.notify_all();
            lock.unlock();
        }
    }
};

void printNumber(int i) {
    std::cout << i;                           
}

int main(int argc, char** argv) {
   int n = 0;
   std::cin >> n;
   ZeroAndEvenOdd zeo(n);
   std::thread th1 = std::thread(std::bind(&ZeroAndEvenOdd::printZero, &zeo, std::placeholders::_1), printNumber);
   std::thread th2 = std::thread(std::bind(&ZeroAndEvenOdd::printEven, &zeo, std::placeholders::_1), printNumber);
   std::thread th3 = std::thread(std::bind(&ZeroAndEvenOdd::printOdd, &zeo, std::placeholders::_1), printNumber);
   th1.join();
   th2.join();
   th3.join();


   std::cout << std::endl;
   return 0;
}



全部评论

(3) 回帖
加载中...
话题 回帖