模拟赛#2 | 牛客普及周赛
题目链接:https://ac.nowcoder.com/acm/contest/59457#rank
AB 纯暴力
C
思维题
从任意情况入手, 设
(这题70分特别好拿, 两个特判加暴力就70了, 比赛的时候5分钟就拿了70分, 然后剩下30分想了一个小时)
代码
/*
Author: SJ
*/
#include<bits/stdc++.h>
const int N = 1e5 + 10;
using ll = long long;
using ull = unsigned long long;
ll t, l, r, ans;
int lowbit(ll x) {
return x & -x;
}
int find(ll x) {
int pos = 0;
while (x) {
pos++;
x >>= 1;
}
return pos;
}
int find2(ll x, ll y) {
int pos = 0, cnt = 0;
while (x && y) {
cnt++;
int tmp1 = (x & 1);
int tmp2 = (y & 1);
if (tmp1 != tmp2) {
pos = cnt;
}
x >>= 1;
y >>= 1;
}
return pos;
}
void solve() {
std::cin >> l >> r;
ans = 0;
if (l == r) {
std::cout << 0 << "\n";;
return;
}
int pos1 = find(l), pos2 = find(r);
if (pos2 > pos1) {
std::cout << (ll)std::pow(2, pos2) - 1 << "\n";
return;
}
int pos3 = find2(l, r);
std::cout << (ll)std::pow(2, pos3) - 1 << "\n";
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> t;
while (t--) solve();
return 0;
}
D
归并排序 + 数学
先用归并排序
代码
/*
Author: SJ
*/
#include<bits/stdc++.h>
const int N = 1e5 + 10;
using ll = long long;
using ull = unsigned long long;
ll n, m, t[N], a[N], cnt, mark1;
void merge_sort(ll a[], int l, int r) {
if (l == r) return;
int mid = (l + r) / 2;
merge_sort(a, l, mid), merge_sort(a, mid + 1, r);
for (int i = l, j = l, k = mid + 1; i <= r; i++) {
if (j == mid + 1) {
t[i] = a[k++];
} else if (k == r + 1) {
cnt += k - mid - 1;
t[i] = a[j++];
} else if (a[j] <= a[k]) {
cnt += k - mid - 1;
t[i] = a[j++];
} else {
t[i] = a[k++];
}
}
for (int i = l; i <= r; i++) {
a[i] = t[i];
}
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n;
for (int i = 1; i <= n; i++) {
std::cin >> a[i];
}
merge_sort(a, 1, n);
if (cnt % 2) mark1 = 1;
else mark1 = 0;
std::cin >> m;
for (int i = 1; i <= m; i++) {
int l, r;
std::cin >> l >> r;
if ((r - l + 1) % 2 == 0) {
int check1 = (r - l + 1) / 2;
mark1 = (check1 % 2) ? ((mark1 + 1) % 2) : mark1;
} else {
int check1 = (r - l) / 2;
mark1 = (check1 % 2) ? ((mark1 + 1) % 2) : mark1;
}
if (mark1 == 0) std::cout << "like" << "\n";
else std::cout << "dislike" << "\n";
}
return 0;
}
期望得分: 400/400
C这种题知道结论就一眼, 真是虚头巴脑
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现