挑战赛题解#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
有帮助,赞一个