2022年xtu程序设计实践3
前言:
发现光做题没有用,还是要写题解不断的回顾做题过程,做好总结。
oj动不动就T,是真的拉
最新更新:
2022-5-7 更新第 1 , 8 , 18 , 19 , 20 1,8,18,19,20 1,8,18,19,20 题。
2022-5-9 更新第 14 , 15 , 16 , 17 14,15,16,17 14,15,16,17 题。
2022-5-11 更新第 10 10 10 题。
2022-5-19 更新第 2 2 2 题。
1-逆序数(大数据)(套路题)
老套路了。逆序对 【总结】
- 归并排序,合并的时候处理贡献
- 树状数组
死活T掉了 - 线段树
- 排序二叉树
建议是平衡树。。。。
贴一份归并的逆序对,很早之前写的,不怕被查重(狗头保命)
#include <cstdio>
using namespace std;
const int lim = 10003;
int n;
int a[lim],k[lim];
int ans;
int read()
{
int res = 0;
char c = getchar();
while(c > '9' || c < '0') c = getchar();
while(c >= '0' && c <= '9')
{
res = res * 10 + c - 48;
c = getchar();
}
return res;
}
void sort_gb(int l,int r)
{
if (l == r) return;
int mid = (l + r) >> 1;
sort_gb(l,mid); sort_gb(mid+1,r);
int i = l, j = mid + 1, p = l;
while(i <= mid || j <= r)
{
if (i > mid) k[p++] = a[j++];
else if (j > r) k[p++] = a[i++], ans += r - mid;
else
{
if (a[i] <= a[j]) k[p++] = a[i++], ans += j - mid - 1;
else k[p++] = a[j++];
}
}
for (p = l; p <= r; ++p)
a[p] = k[p];
}
int main()
{
while(scanf("%d", &n) == 1)
{
if (n == 0) break;
for (int i = 1; i <= n; ++i)
a[i] = read();
ans = 0;
sort_gb(1,n);
printf("%d\n",ans);
}
return 0;
}
2-Shortest Path (一点难)
考虑按顺序经过 { 1 , a 1 , a 2 , a 3 . . a k , n } \{1, a_{1}, a_{2}, a_{3}..a_{k},n \} { 1,a1,a2,a3..ak,n} 个点,并且这 k + 2 k + 2 k+

本文详述了各类程序设计题目,涵盖逆序数、最短路径、翻转棋、线性DP、消星星、周年纪念等挑战,通过实例解析了如何运用归并排序、最短路算法、二进制压缩等技术解决问题,并分享了代码实现和解题心得。
最低0.47元/天 解锁文章
927

被折叠的 条评论
为什么被折叠?



