最小最大和 (Standard IO)

本文介绍了一个游戏策略问题,其中Alice和Bob轮流进行游戏,每轮Bob给出两个整数A和B,要求Alice将所有A序列和B序列中的数一一配对以达到最大和最小的目标。文章提供了详细的解题思路及实现代码。

题意/Description:

       Alice和Bob在玩一个游戏,每一轮Bob都会给Alice两个整数A和B(1<=A,B<=100),Alice每一轮必须把目前所有的A序列和B序列中的数一一配对,每个数必须用且只使用一次,要求最大和最小。

 

读入/Input

       第一行一个整数N(1<=N<=100000),表示比赛的轮数。
  接下来N行每行包含两个整数A和B(1<=A,B<=100),表示Bob这一轮给的两个数。

 

输出/Output

       输出N行,每行输出最小的最大和。

 

题解/solution

       看到n很大,就崩溃了。不过a和b只有100,自信的打了一个桶排。说到这,后面就暴力吧。

       点赞......

 

代码/Code

 

var
  n,max:longint;
  a,b,c,d:array [-100..201] of longint;
procedure init;
var
  x,y,k,i,j:longint;
begin
  readln(n);
  for k:=1 to n do
    begin
      readln(x,y);
      inc(c[x]); inc(d[y]);
      a:=c; b:=d;
      i:=1; j:=100; max:=0;
      while 1=1 do
        begin
          while (a[i]=0) and (i<110) do inc(i);
          while (b[j]=0) and (j>-10) do dec(j);
          if (i>100) and (j<0) then break;
          if a[i]>b[j] then
            begin
              a[i]:=a[i]-b[j];
              b[j]:=0;
            end else
            begin
              b[j]:=b[j]-a[i];
              a[i]:=0;
            end;
          if i+j>max then max:=i+j;
        end;
      writeln(max);
    end;
end;

begin
  init;
end.



### PlatformIO 开发 STM32 标准库配置与示例 #### 1. 平台环境搭建 为了在 PlatformIO 中开发基于 STM32 的标准库项目,需先完成必要的软硬件准备。具体来说,硬件部分需要一块支持目标芯片的最小系统板以及调试工具(如 ST-LINK V2)。软件方面则依赖于 Visual Studio Code 和其插件 PlatformIO Core/IDE[^2]。 安装完成后,在 PlatformIO 中创建新项目时应指定框架为 `STM SVD` 或者手动调整至 CMSIS Standard Library 支持模式下运行。这一步骤可通过编辑项目的 `platformio.ini` 文件来实现自定义设置: ```ini [env:generic_stm32f103c8] platform = ststm32 board = generic_stm32f103c8 framework = stm32cube upload_protocol = stlink build_flags = -D USE_STDPERIPH_DRIVER lib_ldf_mode = deep+ ``` 上述配置片段中特别注意 `-D USE_STDPERIPH_DRIVER` 宏定义的存在,它指示编译器采用标准外设驱动而非 HAL 库作为基础构建模块。 #### 2. 初始化工程结构 新建一个简单的 LED 点亮实验可以验证整个流程是否正常工作。假设我们控制 PA5 引脚上的 LED,则主程序大致如下所示: ```c #include "stm32f1xx.h" void GPIO_Configuration(void); int main(void){ // 配置GPIO口 GPIO_Configuration(); while (1){ GPIO_SetBits(GPIOA, GPIO_Pin_5); /* Turn ON the LED */ Delay(500); GPIO_ResetBits(GPIOA, GPIO_Pin_5); /* Turn OFF the LED */ Delay(500); } } // 延迟函数模拟等待时间 void Delay(__IO uint32_t nTime){ volatile uint32_t delay; for(delay=0;delay<nTime*1000;delay++); } /** * @brief Configures the different system clocks. */ static void SystemClock_Config(void){...} /** * @brief Configure the GPIO ports. */ void GPIO_Configuration(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE ); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; GPIO_Init(GPIOA,&GPIO_InitStructure); } ``` 此代码展示了如何利用标准库初始化并操控特定 IO 口的操作过程[^1]。 #### 3. 处理多线程需求下的资源竞争问题 当引入操作系统级功能比如 FreeRTOS 后,原先单片机裸跑环境中使用的简单机制可能不再适用。例如互斥锁管理就需要依据实际场景选用合适的方式处理。如果是在 RTOS 上层调用 SPI 接口访问外部设备,则推荐通过 OS 提供的标准 API 实现同步逻辑而不是直接关闭全局中断[^3]。 同样地,对于定时任务也可以借助更高层次抽象后的服务替代原始轮询式的延迟方法从而提高效率和可维护性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值