Skip to content

25届秋招科大讯飞飞凡计划研发-第八批

25届秋招科大讯飞飞凡计划研发-第八批

时间:2024-08-30 19:00

选择

screenshot-20240830-19012759screenshot-20240830-19013692screenshot-20240830-19015517screenshot-20240830-19021870screenshot-20240830-19023270screenshot-20240830-19032572screenshot-20240830-19044839screenshot-20240830-19052844screenshot-20240830-19060693screenshot-20240830-19083358screenshot-20240830-19083573screenshot-20240830-19092111screenshot-20240830-19093615screenshot-20240830-19095047screenshot-20240830-19104698screenshot-20240830-19113079screenshot-20240830-19120573

编程

1

screenshot-20240830-19205009screenshot-20240830-19123684
cpp
// Description: 25届秋招科大讯飞飞凡计划研发-第八批
// Accept: 100%
// Date: 2024/08/30

#include <cmath>
#include <iostream>

using namespace std;

int main() {
    int T, h, r, x0, v1, v2;
    while (cin >> T) { // 注意 while 处理多个 case
        while (T-- > 0) {
            cin >> h >> r >> x0 >> v1 >> v2;
            // 箭走的路程
            double arrow_len = sqrt(h * h + x0 * x0);
            double arrow_time = arrow_len / v2;
            // 爆炸时小紫的位置
            double position = v1 * arrow_time;
            if (position >= x0 - r && position <= x0 + r) {
                cout << "Yes" << endl;
            } else {
                cout << "No" << endl;
            }
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

2

screenshot-20240830-19501598screenshot-20240830-19124510
cpp
// Description: 25届秋招科大讯飞飞凡计划研发-第八批
// Accept: 62.5% Timeout
// Date: 2024/08/30

#include <algorithm>
#include <iostream>
#include <unordered_set>
#include <vector>
using namespace std;

int main() {
    int n, q, l, r;
    while (cin >> n >> q) { // 注意 while 处理多个 case
        std::vector<int> arr(n);
        std::vector<std::unordered_set<int>> position(n);
        for (int i = 0; i < n; ++i) {
            position[i] = std::unordered_set<int>();
        }

        for (int i = 0; i < n; ++i) {
            arr[i] = i + 1;
        }
        while (q-- > 0) {
            cin >> l >> r;
            // moveToEnd
            std::rotate(arr.begin() + l - 1, arr.begin() + r, arr.end());
            // 只需统计移动后的,[l-1:arr.size()]的
            for (int i = l - 1; i < arr.size(); ++i) {
                if (arr[i] == i + 1) {
                    continue;
                }
                position[arr[i] - 1].insert(i);
            }
        }

        for (int i = 0; i < n; ++i) {
            cout << position[i].size() + 1 << " ";
        }
        cout << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

3

screenshot-20240830-19124901screenshot-20240830-19125500screenshot-20240830-19125717
cpp
// Description: 25届秋招科大讯飞飞凡计划研发-第八批
// Accept: 86.6% Wrong Answer
// Date: 2024/08/30

#include <iostream>
#include <vector>
using namespace std;

int getResult(vector<int>& nums) {
    int res = 0;
    for (int i = 0, ones = 0; i < nums.size(); ++i) {
        if (nums[i] == 1) {
            ++ones;
        } else {
            res += ones * ones;
            ones = 0;
            continue;
        }

        if (i == nums.size() - 1) {
            res += ones * ones;
        }
    }
    return res;
}

void longestOnes(vector<int>& nums, int k, int& ansl, int& ansr) {
    int n = nums.size();
    int left = 0, lsum = 0, rsum = 0;
    int ans = 0;
    for (int right = 0; right < n; ++right) {
        rsum += 1 - nums[right];
        while (lsum < rsum - k) {
            lsum += 1 - nums[left];
            ++left;
        }
        if (right - left + 1 > ans) {
            ans = right - left + 1;
            ansl = left;
            ansr = right;
        }
    }
}

int main() {
    int n, k, ansl, ansr;
    while (cin >> n >> k) { // 注意 while 处理多个 case
        std::string s;
        cin >> s;
        vector<int> nums(s.size());
        for (int i = 0; i < s.size(); ++i) {
            nums[i] = s[i] == '0' ? 0 : 1;
        }
        if (k == 0) {
            cout << getResult(nums) << endl;
            break;
        }
        longestOnes(nums, k, ansl, ansr);
        for (int i = ansl; i <= ansr; ++i) {
            nums[i] = 1;
        }
        cout << getResult(nums) << endl;
    }
}
// 64 位输出请用 printf("%lld")