第五周机测

快速排序模板

// 注意cmp按sort的写  等号的时候一律交换  
// 比如降序  return a<=b;  sort中是 return a<b

bool cmp1(node a, node b) {
    if (a.wi < b.wi)
        return true;
    else if (a.wi == b.wi) {
        if (a.pi >= b.pi)
            return true;
        else
            return false;
    }
    return false;
}
void mysort(int left, int right, node *a, bool (*cmp)()) {
    int i = left, j = right;
    node temp = a[i];
    if (left >= right) return;
    while (i < j) {
        while (i < j && cmp(temp, a[j]) == true) {
            j--;
        }
        a[i] = a[j];
        while (i < j && cmp(a[i], temp) == true) {
            i++;
        }
        a[j] = a[i];
    }
    a[i] = temp;
    mysort(left, i - 1, a);
    mysort(i + 1, right, a);
}

// 调用:
int main() {

    mysort(0, n-1, a, cmp1);
    return 0;
}

删数问题:
 

#include <cstring>
#include <iostream>  //百度解
using namespace std;
int main() {
    char str[111];  //用字符串存储数字
    int s, i, j;    //删掉的数字个数
    while (~scanf("%s %d", str, &s)) {
        while (s--) {
            for (i = 0; i < strlen(str) - 1; i++) {
                if (str[i] > str[i + 1]) break;
            }
            //删除前一个数
            for (j = i; j < strlen(str); j++)
                str[j] = str[j + 1];  //从该数开始,后一个数字覆盖前一个
        }
        //跳过前几位的'0'
        for (i = 0; i < strlen(str) - 1 && str[i] == '0'; i++)
            ;
        for (; i < strlen(str); i++) printf("%c", str[i]);

        printf("\n");
    }
    return 0;
}

懒虫小鑫:

// #include <algorithm>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
    int wi;
    int pi;
} node;

int main() {
    int n, m, i, j;
    node temp, a[10001];
    while (~scanf("%d %d", &n, &m)) {
        for (i = 0; i < n; i++) scanf("%d %d", &a[i].wi, &a[i].pi);

        for (i = 0; i < n - 1; i++) {
            int k = i;
            for (j = i + 1; j < n; j++) {
                if (a[k].wi > a[j].wi)
                    k = j;
                else if (a[k].wi == a[j].wi && a[k].pi < a[j].pi)
                    k = j;
            }
            if (i != k) {
                node t = a[i];
                a[i] = a[k];
                a[k] = t;
            }
        }
        int cnt = 0;
        i = 0;
        while (m--) {
            cnt += a[i].pi;
            i++;
        }
        printf("%d\n", cnt);
    }
    return 0;
}

活动选择

#include <algorithm>
#include <iostream>
using namespace std;
struct node {
    int start;
    int tend;
    int id;      //活动序号
    int select;  //是否选择该活动
};
int main() {
    node t, act[111];
    int i, j, n;
    cin >> n;
    for (i = 0; i < n; i++) {
        cin >> act[i].start >> act[i].tend;
        act[i].id = i + 1;
        act[i].select = 0;
    }
    //以结束时间的大小对活动进行排序
    for (i = 0; i < n - 1; i++) {
        for (j = i + 1; j < n; j++) {
            if (act[i].tend > act[j].tend) {
                t = act[i];
                act[i] = act[j];
                act[j] = t;
            }
        }
    }
    int temp = 0;  //初始化第一个活动的前一活动(假设)结束时间为0
    for (i = 0; i < n; i++) {
        if (act[i].start >= temp) {
            act[i].select = 1;
            temp = act[i].tend;
        }
    }
    for (i = 0; i < n; i++) {
        if (i == 0)
            cout << act[i].id;
        else if (act[i].select == 1)
            cout << ',' << act[i].id;
    }
    return 0;
}

区间覆盖:

#include <algorithm>
#include <iostream>
using namespace std;
struct node {
    int start;
    int tend;
};
bool down(int a, int b) { return a > b; }
int main() {
    int i, n, t, m;
    int a[522], b[5222];
    node len[5222];
    while (cin >> n >> m) {
        for (i = 0; i < n; i++) cin >> a[i];
        //对输入的数字进行升序排序
        sort(a, a + n);
        int t = a[n - 1] - a[0] + 1;
        for (i = 0; i < n; i++) {
            len[i].start = a[i] - 1;
            len[i].tend = a[i];
        }
        for (i = 0; i < n - 1; i++) b[i] = len[i + 1].start - len[i].tend;
        sort(b, b + n - 1, down);  //对间隔距离进行降序排序

        for (i = 0; i < m - 1;
             i++)  // m条线就要进行m-1次分割,每一次分割删除最大的间隔区间
            t -= b[i];

        cout << t << endl;
    }
    return 0;
}

最少拦截:
 

#include <cstdio>
#include <iostream>
using namespace std;
int main() {
    int c, i, j;
    while (~scanf("%d", &c)) {
        int flag = 0, a[30001], b[30001] = {0};
        int cnt = 1;
        for (i = 0; i < c; i++) {
            scanf("%d", &a[i]);
        }
        b[0] = a[0];
        for (i = 1; i < c; i++) {
            for (j = 0; b[j] != 0; j++) {
                if (a[i] <= b[j]) {
                    flag = 1;
                    break;
                } else if (a[i] > b[j])
                    flag = 0;
            }
            b[j] = a[i];
            if (!flag) {
                cnt++;
            }
        }
        printf("%d\n", cnt);
    }
    return 0;
}

最长上升子序列

#include <algorithm>
#include <iostream>
using namespace std;
int n;
int a[1001], dp[1001];
void solve() {
    for (int i = 1; i <= n; i++) {
        dp[i] = 1;
        for (int j = 1; j < i; j++) {
            if (a[j] < a[i]) {
                dp[i] = max(dp[i], dp[j] + 1);  //化解最小问题解决
            }
        }
    }
    sort(dp + 1, dp + n + 1);
    cout << dp[n] << endl;
}
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    solve();
    return 0;
}

最长公共子序列:

#include <cstring>
#include <iostream>
using namespace std;
char str1[1000], str2[1000];
int dp[1000][1000];
void solve() {
    for (int i = 0; i < strlen(str1); i++) {
        for (int j = 0; j < strlen(str2); j++) {
            if (str1[i] == str2[j])
                dp[i + 1][j + 1] = dp[i][j] + 1;
            else
                dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);
        }
    }
    cout << dp[strlen(str1)][strlen(str2)] << endl;
}
int main() {
    while (~scanf("%s %s", str1, str2)) {
        solve();
    }
    return 0;
}

递归的函数

#include <iostream>
using namespace std;
int s[31][31][31] = {0};
int f(int a, int b, int c);
int main() {
    int a, b, c;
    while (cin >> a >> b >> c) {
        // memset(s, 0, sizeof(s));
        cout << f(a, b, c) << endl;
    }
    return 0;
}
int f(int a, int b, int c) {
    if (a <= 0 || b <= 0 || c <= 0) return 1;
    if (a > 20 || b > 20 || c > 20) return f(20, 20, 20);

    if (s[a][b][c]) return s[a][b][c];
    if (a < b && b < c)
        s[a][b][c] = f(a, b, c - 1) + f(a, b - 1, c - 1) - f(a, b - 1, c);
    else
        s[a][b][c] = f(a - 1, b, c) + f(a - 1, b - 1, c) + f(a - 1, b, c - 1) -
                     f(a - 1, b - 1, c - 1);

    return s[a][b][c];
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值