设为首页 加入收藏

TOP

C++考察二分模拟试题
2014-02-14 12:51:21 来源: 作者: 【 】 浏览:104
Tags:考察 二分 模拟试题
    分析:
    考察二分,简单模拟会超时,优化后时间正好,但二分速度快些,注意以下几点:
    (1):如果一个序列D1 … Dn,如果我们计算Di到Dj的和, 那么我们可以计算D1到Dj的和sum1,D1到Di的和sum2, 然后结果就是sum1 - sum2;
    (2): 那么我们二分则要搜索的就是m + sum[i]的值。
    #include <iostream>
    #include <stdio.h>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <cctype>
    #include <iomanip>
    #include <cmath>
    #include <map>
    using namespace std;
    const int Max_Int = 0x7fffffff;
    const int Max_required = 100005;
    int sum[Max_required];
    int value[Max_required];
    struct Node
    {
    int start;
    int end;
    };
    vector<Node> V_node;
    int binary_find(int target, int n)
    {
    int low = 0, high = n;
    while (low <= high)
    {
    int mid = (low + high) 》 1;
    if (sum[mid] == target)
    return mid;
    else if (sum[mid] < target)
    low = mid + 1;
    else high = mid - 1;
    }
    return low;
    }
    int main()
    {
    int n, m;
    while (scanf("%d%d", &n, &m) != EOF)
    {
    for (int i = 1; i <= n; i++)
    {
    scanf("%d", &value[i]);
    sum[i] = sum[i - 1] + value[i];
    }
    int Min = Max_Int;
    for (int i = 0; i <= n; i++)
    {
    int target = m + sum[i];
    int res = binary_find(target, n);
    //printf("res = %d\n", res);
    if (sum[res] - sum[i] - m >= 0 && sum[res] - sum[i] - m <= Min)
    {
    if (sum[res] - sum[i] - m < Min)
    {
    V_node.clear();
    Min = sum[res] - sum[i] - m;
    Node node;
    node.start = i + 1;
    node.end = res;
    V_node.push_back(node);
    }
    else if (sum[res] - sum[i] - m == Min)
    {
    Node node;
    node.start = i + 1;
    node.end = res;
    V_node.push_back(node);
    }
    }
    }
    for (int i = 0; i < V_node.size(); i++)
    printf("%d-%d\n", V_node[i].start, V_node[i].end);
    }
    return 0;
    }
    View Code

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++快排函数用法 下一篇考察BST与完全二叉树

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)