zoukankan      html  css  js  c++  java
  • Codeforces Global Round B Tape

    题目:点我转移

    【题意】


    x轴上有m个连续的点,从1标号到m.
    其中有n个点是特殊点。
    让你用k段区间将这n个点覆盖。
    要求区间的总长度最小。

    解:

    一开始假设我们需要n个胶带(即包含每一个点)
    然后因为m<=n
    所以可能胶带不够用。
    那么就得一个胶带跨过两个点。
    怎么选择最好呢?
    可以把b[i]-b[i-1]-1处理出来排个序。
    (优先取较小的花费)
    然后取前n-m个累加和sum。
    因为每取一个就少用一段胶带.

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+10;
    int a[maxn];
    int b[maxn];
    int main()
    {
        int n,k,m;
        cin>>n>>k>>m;
        for(int i=0;i<n;i++)
                cin>>a[i];
        int p=0;
        for(int i=1;i<n;i++)
               b[p++]=a[i]-a[i-1]-1;
        ll ans=0;
        ans+=n;
        sort(b,b+p);
        for(int i=0;i<n-m;i++)
            ans+=b[i];
            cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    Add Two Numbers
    Same Tree
    Single Number
    题目1190:大整数排序
    题目1182:统计单词
    题目1181:遍历链表
    题目1180:对称矩阵
    题目1179:阶乘
    题目1206:字符串连接
    HTML事件
  • 原文地址:https://www.cnblogs.com/tp25959/p/10360150.html
Copyright © 2011-2022 走看看