挑战赛题解#9 T1-T5题解十分不正经
2024-09-02 19:26:28
发布于:广东
T1
#include<iostream>
int main(){std::cout<<"KEY1,Yu1lice!";}//笑死直接压缩到底
T2
首先了他给了一个整数,用埃氏筛筛出1-x的质数有多少个(其实可以用线性筛,怕你们看不懂就用埃氏筛了
在求出x/2,做个特判,盼1-x的质数是否大于x/2
#include <iostream>
#include <cmath>
#include <algorithm> 
using namespace std;
const int MAXN = 1e6 + 5;
int prime[MAXN];
bool is_prime[MAXN];
int prime_count = 0;
void sieve() {
    fill(is_prime, is_prime + MAXN, true);
    is_prime[0] = is_prime[1] = false;
    for (int i = 2; i * i < MAXN; ++i) {
        if (is_prime[i]) {
            for (int j = i * i; j < MAXN; j += i) {
                is_prime[j] = false;
            }
        }
    }
    for (int i = 2; i < MAXN; ++i) {
        if (is_prime[i]) {
            prime[prime_count++] = i;
        }
    }
}
int count_primes(long long x) {
    if (x < MAXN) {
        return upper_bound(prime, prime + prime_count, x) - prime;
    }
    int approx_count = static_cast<int>(x / log(x));
    return approx_count;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    sieve();
    int t;
    cin >> t;
    while (t--) {
        long long x;
        cin >> x;
        int count = count_primes(x);
        if (count > x / 2) {
            cout << "YES\n";
        } else {
            cout << "NO\n";
        }
    }
    return 0;
}
T3
本题消灭了所有没参加过今年蓝桥杯或使用Python的人
真服了这勾八数据,居然std没开longlong,害了我试了114514遍才发现开int过
给那个数,对字符串长度取模,根据题意就可以a了
#include <iostream>
using namespace std;
int main() {
    string s;
    int m;
    cin >> s >> m;
   	//int 
    long long  n = s.length();
    m = m % n;  
    string result = s.substr(n - m) + s.substr(0, n - m);
    cout << result << endl;
    return 0;
}
T4
笑死我了,macw所说的超强数据,太强了,把我给整笑了,让童骗了94分🤣🤣
ok,讲一下该函数接受两个序列 a 和 b,以及它们的尺寸 n 和 k,以及整数 m。
函数首先将序列 a 转换为一个简化的形式,其中每个元素被拆分为不可再拆分的部分,并记录每个部分的计数。这个过程通过遍历序列 a 并检查每个元素是否可以被 m 整除来实现。
类似地,函数将序列 b 转换为简化的形式。
最后,函数比较两个简化后的序列是否相等,如果相等则返回 true,否则返回 false
#include <iostream>
using namespace std;
bool ca(int* a, int n, int m, int* b, int k) {
    pair<int, int>* ta = new pair<int, int>[n];
    int taSize = 0;
    for (int i = 0; i < n; ++i) {
        int num = a[i];
        int count = 1;
        while (num % m == 0) {
            num /= m;
            count *= m;
        }
        if (taSize > 0 && ta[taSize - 1].first == num) {
            ta[taSize - 1].second += count;
        } else {
            ta[taSize++] = make_pair(num, count);
        }
    }
    pair<int, int>* tb = new pair<int, int>[k];
    int tbSize = 0;
    for (int i = 0; i < k; ++i) {
        int num = b[i];
        int count = 1;
        while (num % m == 0) {
            num /= m;
            count *= m;
        }
        if (tbSize > 0 && tb[tbSize - 1].first == num) {
            tb[tbSize - 1].second += count;
        } else {
            tb[tbSize++] = make_pair(num, count);
        }
    }
    bool result = taSize == tbSize;
    for (int i = 0; result && i < taSize; ++i) {
        result = ta[i] == tb[i];
    }
    delete[] ta;
    delete[] tb;
    return result;
}
int main() {
    int t;
    cin >> t;
    while (t--) {
        int n, m;
        cin >> n >> m;
        int* a = new int[n];
        for (int i = 0; i < n; ++i) {
            cin >> a[i];
        }
        int k;
        cin >> k;
        int* b = new int[k];
        for (int i = 0; i < k; ++i) {
            cin >> b[i];
        }
        if (ca(a, n, m, b, k)) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
        delete[] a;
        delete[] b;
    }
    return 0;
}
T5
纯纯人机模拟题
上代码
#include <iostream>
#include <algorithm>
using namespace std;
struct Event {
    int time, boxes;
    bool isStart;
    Event(int t, int b, bool s) : time(t), boxes(b), isStart(s) {}
};
bool cop(const Event &a, const Event &b) {
    if (a.time == b.time) return a.isStart < b.isStart;
    return a.time < b.time;
}
int main() {
    int N, L, R, a, maxBoxes = 0, currentBoxes = 0;
    cin >> N;
    Event events[2 * N];
    for (int i = 0; i < N; ++i) {
        cin >> L >> R >> a;
        events[2 * i] = Event(L, a, true);
        events[2 * i + 1] = Event(R, a, false);
    }
    sort(events, events + 2 * N, cop);
    for (int i = 0; i < 2 * N; ++i) {
        if (events[i].isStart) {
            currentBoxes += events[i].boxes;
            maxBoxes = max(maxBoxes, currentBoxes);
        } else {
            currentBoxes -= events[i].boxes;
        }
    }
    cout << maxBoxes << endl;
    return 0;
}
全部评论 1
连置顶都没有,伤心了,
2024-09-02 来自 广东
0一眼GPT🤣估算都估错了
转人工2024-09-22 来自 广东
0







有帮助,赞一个