2 条题解

  • 0
    @ 2026-2-19 23:25:48
    #include<bits/stdc++.h>
    using namespace std;
    
    // [1] 全局变量,存储书架上书的总数量
    int n;
    // [2] 全局数组,存储书架每个位置的书的编号,数组大小适配题目n≤1000的数据范围
    int arr[1100];
    
    int main(){
    	// [3] 定义位置变量:left记录编号1的书的位置,right记录编号n的书的位置
    	int left = 0 , right = 0;
    	// [4] 遍历输入的n本书,定位编号1和编号n的书的初始位置
    	for(int i = 0 ; i < n ; i++)
    	{
    		cin >> arr[i];  // [5] 读取书架第i个位置的书的编号
    		if(arr[i] == 1) left = i;  // [6] 找到编号1的书,记录其所在位置
    		if(arr[i] == n) right = i; // [7] 找到编号n的书,记录其所在位置
    	}
    	
    	// [8] 累加变量,记录机器人的总操作次数
    	int sum = 0;
    	// [9] 循环左移,将编号1的书移动到书架最左端(位置0)
    	while(left != 0)
    	{	
    		// [10] 核心处理:左移时若遇到编号n的书,同步更新n的位置(1左移会推动n右移1位)
    		if(arr[left - 1] == arr[right]) right++;
    		swap(arr[left] , arr[left - 1] ); // [11] 交换相邻两本书,完成一次左移操作
    		left--; // [12] 更新编号1的书左移后的新位置
    		sum++; // [13] 完成一次操作,总次数+1
    	}
    	
    	// [14] 循环右移,将编号n的书移动到书架最右端(位置n-1)
    	while(right != n-1)
    	{
    		swap(arr[right] , arr[right + 1] ); // [15] 交换相邻两本书,完成一次右移操作
    		right++; // [16] 更新编号n的书右移后的新位置
    		sum++; // [17] 完成一次操作,总次数+1
    	}
    	cout << sum; // [18] 输出整理书架的最小操作总次数
        return 0;
    }
    

    信息

    ID
    1471
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者