• 陕西师范大学第七届程序设计竞赛网络同步赛 C iko和她的糖【贪心/ STL-优先队列/ 从1-N每个点有能量补充,每段有消耗,选三个点剩下最多能量】


    链接:https://www.nowcoder.com/acm/contest/121/C
    来源:牛客网

    题目描述

        iko超级超级喜欢吃糖,有一天iko想出去玩,她计划从1点走到N点(按1,2,3,...,n的顺序走),每个点都有一个补给站,第i点的补给站有a[i]颗糖,从i点走到i+1点会消耗掉b[i]颗糖,iko在出游的途中可以选择三个补给站,iko想知道她走完全程到达N点时口袋里最多还能剩下几颗糖(初始时iko的口袋里一颗糖都没有)。

    输入描述:

    第一行输入N(3<=N<=1000)
    第二行输入N个数代表a[1].......a[N] (0<=a[i]<=1000 )
    第三行输入N-1个数代表b[1]......b[N-1] ( 1<=b[i]<=1000 )

    输出描述:

    输出一个数字表示iko到达n点时口袋里最多剩下的糖,
    若不能到达N点输出-1。
    示例1

    输入

    3
    1 3 4
    3 4

    输出

    -1
    示例2

    输入

    5
    3 4 5 2 4
    3 2 2 2

    输出

    3

    【代码】:

    #include<bits/stdc++.h>
    #include<cstdio>
    #include<string>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    #include<cstring>
    #include<set>
    #include<queue>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<cctype>
    #include<stack>
    #include<sstream>
    #include<list>
    #include<assert.h>
    #include<bitset>
    #include<numeric>
    #define debug() puts("++++")
    #define gcd(a,b) __gcd(a,b)
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define fi first
    #define se second
    #define pb push_back
    #define sqr(x) ((x)*(x))
    #define ms(a,b) memset(a,b,sizeof(a))
    #define sz size()
    #define be begin()
    #define pu push_up
    #define pd push_down
    #define cl clear()
    #define lowbit(x) -x&x
    #define all 1,n,1
    #define rep(i,n,x) for(int i=(x); i<(n); i++)
    #define in freopen("in.in","r",stdin)
    #define out freopen("out.out","w",stdout)
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    typedef pair<int,int> P;
    const int INF = 0x3f3f3f3f;
    const LL LNF = 1e18;
    const int maxn = 1e3 + 20;
    const int maxm = 1e6 + 10;
    const double PI = acos(-1.0);
    const double eps = 1e-8;
    const int dx[] = {-1,1,0,0,1,1,-1,-1};
    const int dy[] = {0,0,1,-1,1,-1,1,-1};
    const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int n,m;
    int a[maxm],b[maxm],c[maxm];
    priority_queue<int> q;
    int main()
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++) cin>>a[i];
        for(int i=0;i<n-1;i++) cin>>b[i];
        int now = 0, cnt = 0;
        for(int i=0; i<n; i++){
    q.push(a[i]);
    while(now < b[i]){ //现在拥有的糖果数量小于消耗的 if (q.empty()) return puts("-1"), 0; if (cnt == 3) return puts("-1"), 0; now += q.top(); q.pop(); cnt++; //次数计数 } if(i<n-1) now-=b[i];
    }
    while(cnt<3 && !q.empty()){ // now += q.top(); q.pop(); cnt++; } cout<<now<<endl; }
  • 相关阅读:
    delphi TOpenDialog
    delphi TSaveDialog
    Delphi中一些常用的组合键值
    delphi TColorDialog
    Delphi TFindDialog TReplaceDialog对话框在Memo中的使用
    Delphi ListView基本用法大全
    地球帝国3
    五笔难拆字字根表
    Delphi Format中的换行符号是什么
    myNote
  • 原文地址:https://www.cnblogs.com/Roni-i/p/9037790.html
Copyright © 2020-2023  润新知