做题笔记:某大讯飞真题28道

cpp 复制代码
 #include <stdio.h>
    int main() {
        int n;
        scanf("%d", &n);
        if (n % 2 != 0) {
            printf("-1\n");
            return 0;
        }
        int k = n/2;   // n为偶数
        int y_max = n/8;  // 8个袋子的最大数量
        int ans = -1;
        for (int y = y_max; y>=0; y--) {
            // 计算剩余的橘子数=2k-8y = 4k-8y? 注意:方程是3x+4y=k
            if ( (k - 4*y) >=0 && (k-4*y)%3 ==0 ) {
                int x = (k-4*y)/3;
                ans = x+y;
                break;
            }
        }
        printf("%d\n", ans);
        return 0;
    }
cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100010

int a[MAX_N], b[MAX_N];
int tree[4 * MAX_N];

// 手动实现二分查找(替代lower_bound)
int binary_search(int arr[], int n, int x) {
    int l = 0, r = n - 1;
    while (l <= r) {
        int mid = l + (r - l) / 2;
        if (arr[mid] < x) l = mid + 1;
        else if (arr[mid] > x) r = mid - 1;
        else return mid; // 找到精确匹配
    }
    return l; // 返回第一个不小于x的位置
}

// 线段树相关函数保持不变(同原代码)
void build(int node, int l, int r) {
    tree[node] = 0;
    if (l == r) return;
    int mid = (l + r) >> 1;
    build(node << 1, l, mid);
    build(node << 1 | 1, mid + 1, r);
}

void update(int node, int l, int r, int idx, int delta) {
    if (l == r) {
        tree[node] += delta;
        return;
    }
    int mid = (l + r) >> 1;
    if (idx <= mid) update(node << 1, l, mid, idx, delta);
    else update(node << 1 | 1, mid + 1, r, idx, delta);
    tree[node] = tree[node << 1] + tree[node << 1 | 1];
}

int query(int node, int l, int r, int k) {
    if (l == r) return l;
    int mid = (l + r) >> 1;
    if (tree[node << 1] >= k)
        return query(node << 1, l, mid, k);
    else
        return query(node << 1 | 1, mid + 1, r, k - tree[node << 1]);
}


int cmp(const void* a, const void* b) {
    return *(int*)a - *(int*)b;
}

int main() {
    int n, m;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
        b[i] = a[i];
    }

    // 离散化处理
    qsort(b, n, sizeof(int), cmp);
    m = 1;
    for (int i = 1; i < n; i++)
        if (b[i] != b[i - 1]) b[m++] = b[i];

    // 构建权值线段树
    build(1, 0, m - 1);

    // 初始化更新(使用binary_search替代lower_bound)
    for (int i = 0; i < n; i++) {
        int pos = binary_search(b, m, a[i]);
        update(1, 0, m - 1, pos, 1);
    }

    int len = n;
    for (int i = 0; i < n; i++) {
        int k = (len + 1) / 2;  // 中位数位置
        int idx = query(1, 0, m - 1, k);
        printf("%d ", b[idx]);
        update(1, 0, m - 1, idx, -1);  // 删除当前中位数
        len--;
    }
    return 0;
}
cpp 复制代码
    #include <stdio.h>
    #include <stdlib.h>
    #define ll long long

    ll terms[100]; // will not exceed 30 items

    int main() {
        int T;
        scanf("%d",&T);
        while (T--) {
            ll n;
            scanf("%lld",&n);
            ll p = 1;
            int count = 0;
            while (n>0) {
                ll r = n % 3;
                if (r==0) {
                    n /= 3;
                } else if (r==1) {
                    terms[count++] = p;
                    n = (n-1)/3;
                } else if (r==2) {
                    terms[count++] = 2 * p;
                    n = (n-2)/3;
                }
                p *= 3;
            }
            // reverse terms array: index 0 to count-1 (originally added in increasing b, so we output from count-1 to 0)
            // but the problem requires from large to small.
            printf("%d\n",count);
            if (count==0) {
                // no terms, but count=0, so just output the empty line?
                printf("\n");
            } else {
                // output from the last term to the first term
                for (int i=count-1; i>=0; i--) {
                    printf("%lld ", terms[i]);
                }
                printf("\n");
            }
        }
        return 0;
    }
相关推荐
生成论实验室3 分钟前
用事件关系网络重新理解AI(二):损失函数、优化器与深度学习的动力学
数据结构·人工智能·深度学习·算法·语言模型
霍霍的袁9 分钟前
【C++初阶】缺省参数(默认参数)详细讲解
开发语言·c++·算法
risc12345611 分钟前
DocumentsWriterDeleteQueue 的核心设计思想
java·全文检索·lucene
计算机安禾15 分钟前
【算法分析与设计】第2篇:计算模型与渐进复杂性分析
算法
生成论实验室21 分钟前
事件、信息荷与六维态势空间——每一个事件都是一次空间的弯曲
人工智能·算法·语言模型·可信计算技术·安全架构
budingxiaomoli26 分钟前
递归,搜索与回溯算法--递归
算法
风味蘑菇干26 分钟前
Stream基础题目
java·算法
2501_9327502630 分钟前
Java反射机制基础入门
java·开发语言
5008438 分钟前
HCCL 集合通信编程:多卡协同的正确姿势
java·flutter·性能优化·electron·wpf
KaMeidebaby38 分钟前
卡梅德生物技术快报|真核蛋白表达信号肽筛选实验全流程复盘
服务器·前端·数据库·人工智能·算法