当前位置:首页 > 题解目录 > 正文内容

【题解】自动晾衣机

亿万年的星光9个月前 (03-21)题解目录565

【题目描述】

有一个环形可以晾衣服的衣架,有若干个夹子组成,它可以晾不同长度的衣服(占用多个夹子),并且每两件衣服中间要有一个空夹子作为空位,下面需要依次晾干几件长度不一的衣服,请你给出某个夹子的使用情况。

【输入格式】

第一行一个数n,表示晾衣架的长度。(n<100000)

接下来有若干条数据,每条数据第一行若干个数(数据保证不会占满n),表示衣服的长度

第二行一个数 i,表示要查询 i 位置的使用情况

【输出格式】

输出第x位置夹子的状态

对于每个数据,输出一个状态占一行,其中使用0表示未使用,1表示有衣服,2表示格子用于隔开衣服。

【样例输入】

50 2 33 2 34 3 25 2 1 50

【样例输出】

2 0




【参考代码一】

#include <iostream>
#include <cstring>
using namespace std;
int f[100005];
int main() {
    int n, m, t, now;
    cin >> n;
    while (cin >> m) {
        memset(f, 0, sizeof f), now = 0; // 每次都需要重新初始化
        for (int i = 1; i <= m; ++i) {
            cin >> t;
            for (int j = ++now; j < now + t; ++j) 
                f[j] = 1; // 衣服占的位置 
            f[now += t] = 2; // 隔开的位置 
        }
        cin >> m;
        cout << f[m] << endl;
    }
    return 0;
}






【参考代码二】

解题思路

  1. 环形结构:晾衣架是环形的,因此需要考虑循环遍历。

  2. 衣服晾晒规则

    • 每件衣服占用连续的夹子。

    • 每两件衣服之间必须有一个空夹子作为分隔。

  3. 状态标记

    • 使用数组 state 记录每个夹子的状态。

    • 遍历每件衣服,标记其占用的夹子为 1,并确保分隔夹子为 2

  4. 查询输出

    • 根据查询的位置 i,输出 state[i] 的值。

#include <iostream>
#include <vector>
 
using namespace std;
 
int main() {
    int n; // 晾衣架的长度 
    cin >> n;
    
    vector<int> state(n, 0); // 初始化所有夹子状态为0(未使用)
    
    int pos = 0; // 当前晾衣的起始位置 
    
    while (true) {
        // 读取衣服长度 
        int len;
        if (!(cin >> len)) break; // 如果没有输入,结束循环 
        
        // 检查是否超出晾衣架长度 
        if (pos + len > n) {
            pos = 0; // 如果超出,从头开始 
        }
        
        // 标记衣服占用的夹子为1 
        for (int i = 0; i < len; ++i) {
            state[(pos + i) % n] = 1;
        }
        
        // 标记分隔夹子为2 
        state[(pos + len) % n] = 2;
        
        // 更新起始位置 
        pos = (pos + len + 1) % n;
    }
    
    // 查询夹子状态 
    int i;
    while (cin >> i) {
        cout << state[i] << endl;
    }
    
    return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

合影效果

【题目描述】小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他...

【题解—深搜】马走日

【题解—深搜】马走日

【题目描述】马在中国象棋以日字形规则移动。请编写一段程序,给定n×m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。【输入】第一行为整...

糖果传递

题目描述有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。输入格式第一行一个正整数n≤1000000,表示小朋友的个数.接下来n行,每行一个整数ai,表...

【题解目录】友好城市

【题解目录】友好城市

【题目描述】Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河...

【题解】摘花生问题

【题解】摘花生问题

【题目描述】Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过...

【题解】高精度除法

【题目描述】高精除以高精,求它们的商和余数。【输入描述】输入两个低于300位的正整数。【输出描述】输出商和余数。【样例输入】12313123184575776878979876423245678643...