• 【Codeforces Round #493 (Div. 2) B】Cutting


    【链接】 我是链接,点我呀:)
    【题意】

    在这里输入题意

    【题解】

    显然只有在前i个位置奇数偶数出现次数都相同的地方才能切。 (且不管前面怎么切,这里都能切的。 那么就相当于有n个物品,每个物品的代价是|a[i]-a[i-1]|,然后价值是1. 因为价值是一样的。。所以肯定优先选价值最小的几个。。。 直接sort就可以了。。

    【代码】

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 100;
    const int INF = 1e8;
    
    int pre[N+10][2],a[N+10],cost[N+10],cnt;
    int n,B;
    
    int main()
    {
        #ifdef LOCAL_DEFINE
            freopen("rush.txt","r",stdin);
        #endif // LOCAL_DEFINE
        ios::sync_with_stdio(0),cin.tie(0);
        cin >> n >> B;
        for (int i = 1;i <= n;i++) cin >> a[i];
        for (int i = 1;i <= n;i++){
            for (int j = 0;j < 2;j++) pre[i][j] = pre[i-1][j];
            pre[i][a[i]&1]++;
        }
        for (int i = 1;i <= n-1;i++)
            if (pre[i][0]==pre[i][1]){
                cost[++cnt] = abs(a[i+1]-a[i]);
            }
        n = cnt;
        sort(cost+1,cost+1+cnt);
        for (int i = 1,j = 0;i <= cnt;i++){
            if (j+cost[i]>B){
                cout<<i-1<<endl;
                return 0;
            }
            j+=cost[i];
        }
        cout<<cnt<<endl;
        return 0;
    }
    
    
    
  • 相关阅读:
    Redis命令
    Linux命令
    SQL语句
    Redis集群
    Redis主主复制、主从复制
    关于Java乱码
    组合, 封装, 访问限制机制, property装饰器, 多态
    继承
    小练习
    面向过程与面向对象, 类和对象
  • 原文地址:https://www.cnblogs.com/AWCXV/p/9733338.html
Copyright © 2020-2023  润新知