[编程题]香槟塔

香槟塔问题:编程挑战
这是一道编程题目,描述了在庆祝活动中,牛牛和妞妞使用香槟塔的情景。当某层香槟满溢时,香槟会流到下一层。题目要求处理两种指令:向特定层倒入香槟和查询特定层的香槟体积。输入包括香槟塔层数、操作数及每次操作的详细信息,输出则需回答查询。题目对时间和空间复杂度有一定限制,并给出了输入输出的例子。

时间限制:1秒

空间限制:262144K

节日到啦,牛牛和妞妞邀请了好多客人来家里做客。
他们摆出了一座高高的香槟塔,牛牛负责听妞妞指挥,往香槟塔里倒香槟。
香槟塔有个很优雅的视觉效果就是如果这一层的香槟满了,就会从边缘处往下一层流去。
妞妞会发出两种指令,指令一是往第x层塔内倒体积为v的香槟,指令二是询问第k层塔香槟的体积为多少。

告诉你香槟塔每层香槟塔的初始容量,你能帮牛牛快速回答妞妞的询问吗?

输入描述:

第一行为两个整数n,m。表示香槟塔的总层数和指令条数。
第二行为n个整数ai,表示每层香槟塔的初始容量。

第三行到第2+m行有两种输入,一种输入是“2 x v”表示往第x层倒入体积为v的香槟;另一种输入是“1 k”表示询问第k层当前有多少香槟。

1 <= n, m <= 1000。
1 <= n ,m <= 200000,1 <= ai ,v <= 1000000000。

输出描述:

对于每个询问,输出一个整数,表示第k层香槟的容量。

输入例子1:

1 2
8
2 1 9
1 1

输出例子1:

8

输入例子2:

5 4
1 2 2 10 1
1 3
2 2 5
2 4 3
1 4

输出例子2:

0
4
#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n,m;
    cin>>n>>m;
    int cap[n];
    vector<int>temp(n,0);
    for(int i=0;i<n;i++)
        cin>>cap[i];
    int order,x,v;
    while(m--){
        cin>>order;
        if(order==1){
            cin>>x;
            cout<<temp[x-1]<<endl;
        }
        else{
            cin>>x>>v;
            while(v&&x<=n){
                if(temp[x-1]+v<=cap[x-1]){
                    temp[x-1]+=v;
                    v=0;
                }
                else{
                    v=temp[x-1]+v-cap[x-1];
                    temp[x-1]=cap[x-1];
                    x++;
                }
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值