Queue on Bus Stop

本文探讨了俄罗斯人们在夏季前往乡村小屋时,如何通过公交车进行集体出行的问题。具体而言,文章详细介绍了如何计算所需公交车数量,以确保所有小组都能顺利到达目的地。包括输入和输出说明,以及一个具体的示例来展示解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

It's that time of the year when the Russians flood their countryside summer cottages (dachas) and the bus stop has a lot of people. People rarely go to the dacha on their own, it's usually a group, so the people stand in queue by groups.

The bus stop queue has n groups of people. The i-th group from the beginning has ai people. Every 30 minutes an empty bus arrives at the bus stop, it can carry at most m people. Naturally, the people from the first group enter the bus first. Then go the people from the second group and so on. Note that the order of groups in the queue never changes. Moreover, if some group cannot fit all of its members into the current bus, it waits for the next bus together with other groups standing after it in the queue.

Your task is to determine how many buses is needed to transport all n groups to the dacha countryside.

Input

The first line contains two integers n and m(1 ≤ n, m ≤ 100). The next line contains n integers: a1, a2, ..., an(1 ≤ ai ≤ m).

Output

Print a single integer — the number of buses that is needed to transport all n groups to the dacha countryside.

Sample Input

Input
4 3
2 3 2 1
Output
3
Input
3 4
1 2 1
Output
1


#include<cstdio>
#include<iostream>
using namespace std;

int a[105];

int main(){
    int n,m,i,ans,now;
    while(cin>>n>>m){
        for(i=0;i<n;i++){
            cin>>a[i];
        }
        ans=1;
        now=m;
        for(i=0;i<n;){
            if(a[i]<=now){
                now-=a[i];
                i++;
            }
            else{
                now=m;
                ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}


#include "wifi_board.h" #include "audio_codecs/no_audio_codec.h" #include "display/oled_display.h" #include "system_reset.h" #include "application.h" #include "button.h" #include "config.h" #include "mcp_server.h" #include "lamp_controller.h" #include "iot/thing_manager.h" #include "led/single_led.h" #include "assets/lang_config.h" #include <wifi_station.h> #include <esp_log.h> #include <driver/i2c_master.h> #include <esp_lcd_panel_ops.h> #include <esp_lcd_panel_vendor.h> #ifdef SH1106 #include <esp_lcd_panel_sh1106.h> #endif #define TAG "CompactWifiBoard" LV_FONT_DECLARE(font_puhui_14_1); LV_FONT_DECLARE(font_awesome_14_1); class CompactWifiBoard : public WifiBoard { private: i2c_master_bus_handle_t display_i2c_bus_; esp_lcd_panel_io_handle_t panel_io_ = nullptr; esp_lcd_panel_handle_t panel_ = nullptr; Display* display_ = nullptr; Button boot_button_; Button touch_button_; Button volume_up_button_; Button volume_down_button_; void InitializeDisplayI2c() { i2c_master_bus_config_t bus_config = { .i2c_port = (i2c_port_t)0, .sda_io_num = DISPLAY_SDA_PIN, .scl_io_num = DISPLAY_SCL_PIN, .clk_source = I2C_CLK_SRC_DEFAULT, .glitch_ignore_cnt = 7, .intr_priority = 0, .trans_queue_depth = 0, .flags = { .enable_internal_pullup = 1, }, }; ESP_ERROR_CHECK(i2c_new_master_bus(&bus_config, &display_i2c_bus_)); } void InitializeSsd1306Display() { // SSD1306 config esp_lcd_panel_io_i2c_config_t io_config = { .dev_addr = 0x3C, .on_color_trans_done = nullptr, .user_ctx = nullptr, .control_phase_bytes = 1, .dc_bit_offset = 6, .lcd_cmd_bits = 8, .lcd_param_bits = 8, .flags = { .dc_low_on_data = 0, .disable_control_phase = 0, }, .scl_speed_hz = 400 * 1000, }; ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c_v2(display_i2c_bus_, &io_config, &panel_io_)); ESP_LOGI(TAG, "Install SSD1306 driver"); esp_lcd_panel_dev_config_t panel_config = {}; panel_config.reset_gpio_num = -1; panel_config.bits_per_pixel = 1; esp_lcd_panel_ssd1306_config_t ssd1306_config = { .height = static_cast<uint8_t>(DISPLAY_HEIGHT), }; panel_config.vendor_config = &ssd1306_config; #ifdef SH1106 ESP_ERROR_CHECK(esp_lcd_new_panel_sh1106(panel_io_, &panel_config, &panel_)); #else ESP_ERROR_CHECK(esp_lcd_new_panel_ssd1306(panel_io_, &panel_config, &panel_)); #endif ESP_LOGI(TAG, "SSD1306 driver installed"); // Reset the display ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_)); if (esp_lcd_panel_init(panel_) != ESP_OK) { ESP_LOGE(TAG, "Failed to initialize display"); display_ = new NoDisplay(); return; } ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel_, false)); // Set the display to on ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, {&font_puhui_14_1, &font_awesome_14_1}); } void InitializeButtons() { boot_button_.OnClick([this]() { auto& app = Application::GetInstance(); if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { ResetWifiConfiguration(); } app.ToggleChatState(); }); touch_button_.OnPressDown([this]() { Application::GetInstance().StartListening(); }); touch_button_.OnPressUp([this]() { Application::GetInstance().StopListening(); }); volume_up_button_.OnClick([this]() { auto codec = GetAudioCodec(); auto volume = codec->output_volume() + 10; if (volume > 100) { volume = 100; } codec->SetOutputVolume(volume); GetDisplay()->ShowNotification(Lang::Strings::VOLUME + std::to_string(volume)); }); volume_up_button_.OnLongPress([this]() { GetAudioCodec()->SetOutputVolume(100); GetDisplay()->ShowNotification(Lang::Strings::MAX_VOLUME); }); volume_down_button_.OnClick([this]() { auto codec = GetAudioCodec(); auto volume = codec->output_volume() - 10; if (volume < 0) { volume = 0; } codec->SetOutputVolume(volume); GetDisplay()->ShowNotification(Lang::Strings::VOLUME + std::to_string(volume)); }); volume_down_button_.OnLongPress([this]() { GetAudioCodec()->SetOutputVolume(0); GetDisplay()->ShowNotification(Lang::Strings::MUTED); }); } // 物联网初始化,逐步迁移到 MCP 协议 void InitializeIot() { #if CONFIG_IOT_PROTOCOL_XIAOZHI auto& thing_manager = iot::ThingManager::GetInstance(); thing_manager.AddThing(iot::CreateThing("Speaker")); thing_manager.AddThing(iot::CreateThing("Lamp")); #elif CONFIG_IOT_PROTOCOL_MCP static LampController lamp(LAMP_GPIO); #endif } public: CompactWifiBoard() : boot_button_(BOOT_BUTTON_GPIO), touch_button_(TOUCH_BUTTON_GPIO), volume_up_button_(VOLUME_UP_BUTTON_GPIO), volume_down_button_(VOLUME_DOWN_BUTTON_GPIO) { InitializeDisplayI2c(); InitializeSsd1306Display(); InitializeButtons(); InitializeIot(); } virtual Led* GetLed() override { static SingleLed led(BUILTIN_LED_GPIO); return &led; } virtual AudioCodec* GetAudioCodec() override { #ifdef AUDIO_I2S_METHOD_SIMPLEX static NoAudioCodecSimplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, AUDIO_I2S_SPK_GPIO_BCLK, AUDIO_I2S_SPK_GPIO_LRCK, AUDIO_I2S_SPK_GPIO_DOUT, AUDIO_I2S_MIC_GPIO_SCK, AUDIO_I2S_MIC_GPIO_WS, AUDIO_I2S_MIC_GPIO_DIN); #else static NoAudioCodecDuplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, AUDIO_I2S_GPIO_BCLK, AUDIO_I2S_GPIO_WS, AUDIO_I2S_GPIO_DOUT, AUDIO_I2S_GPIO_DIN); #endif return &audio_codec; } virtual Display* GetDisplay() override { return display_; } }; DECLARE_BOARD(CompactWifiBoard); 请注释代码
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值