Plan for the day

完成了关于Linux和嵌入式Linux演示文稿的第一版,暂命名为“Linux在嵌入式系统中的应用”,并开始撰写同一主题的白皮书,同时进行了周报总结。

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

  • Finish the first edition of my presentation on Linux and Embedded Linux, which is temporary named “How Linux is used in embedded systems”;
  • Start composing the white pager which is on the same topic;
  • Weekly Report
逐句解释SQL -- ================================================================================================= -- SQL SCRIPT FOR DAILY OUTPUT PLAN PROCESSING -- Description: This script refactors the business logic from '日产出目标.py' into a single, -- comprehensive SQL query. It processes work orders, corrects schedule times based on -- resource constraints, and calculates the daily output plan for the next 7 days. -- Target Table: daily_output_plan_final -- ================================================================================================= -- Step 0.1: Create the final output table if it doesn't exist CREATE TABLE IF NOT EXISTS daily_output_plan_final ( "批次" TEXT NOT NULL, "指令" TEXT, "线体" TEXT, "单板代码" TEXT, "单板名称" TEXT, "计划数量" REAL, "产出数量" REAL, "剩余数量" REAL, "计划开始时间" TEXT, "计划结束时间" TEXT, "实际开始时间" TEXT, "修正后计划开始时间" TEXT, "修正后计划结束时间" TEXT, "主工序" TEXT, "工序序号" INTEGER, "入库工序" TEXT, "入库时间" TEXT, "产品大类" TEXT, "工厂" TEXT, "责任人" TEXT, "day_1_output" REAL, "day_2_output" REAL, "day_3_output" REAL, "day_4_output" REAL, "day_5_output" REAL, "day_6_output" REAL, "day_7_output" REAL ); -- Step 0.2: Clean up the final table before insertion DELETE FROM daily_output_plan_final; -- Step 1: Use a CTE to prepare and pre-calculate data, similar to the initial Python DataFrame setup. WITH PreparedData AS ( SELECT wo.prodplanId AS "批次", wo.workOrderNo AS "指令", wo.lineName AS "线体", wo.itemNo AS "单板代码", wo.itemName AS "单板名称", CAST(wo.taskQty AS REAL) AS "计划数量", wo.scheduleStartDate AS "计划开始时间", wo.scheduleEndDate AS "计划结束时间", wo.actualStartDate AS "实际开始时间", wo.craftSection AS "主工序", wo.order_index AS "顺序号", CAST(wo.remark AS INTEGER) AS "工序序号", CAST(wo.outputQty AS REAL) AS "产出数量", wo.externalType AS "产品大类", wo.factoryName AS "工厂", -- Calculate remaining quantity, ensuring it's not negative MAX(0, CAST(wo.taskQty AS REAL) - CAST(wo.outputQty AS REAL)) AS "剩余数量", -- Merge craft data with defaults for calculation COALESCE(cd.unitPerHour, 60) AS "UPH", COALESCE(cd.operationEfficiency, 1) AS "作业效率", COALESCE(cd.transferTime, 0.5) AS "转机时间", COALESCE(cd.endingTime, 0.5) AS "收尾时间", -- Calculate production time in hours (MAX(0, CAST(wo.taskQty AS REAL) - CAST(wo.outputQty AS REAL)) / NULLIF(COALESCE(cd.unitPerHour, 60) * COALESCE(cd.operationEfficiency, 1), 0)) AS production_time, -- Determine if it's the last operation in the batch to mark for warehousing CASE WHEN wo.remark = MAX(wo.remark) OVER (PARTITION BY wo.prodplanId) THEN '是' ELSE '否' END AS "入库工序" FROM work_orders wo LEFT JOIN craft_data cd ON wo.itemNo = cd.itemNo AND wo.craftSection = cd.mainProcess WHERE -- Filter out completed or near-completed orders (CAST(wo.taskQty AS REAL) > 0 AND (CAST(wo.outputQty AS REAL) / CAST(wo.taskQty AS REAL)) <= 0.9) ), -- Step 2: Rank operations to establish a processing order for the recursive CTE RankedData AS ( SELECT *, -- Rank within the same batch ROW_NUMBER() OVER (PARTITION BY "批次" ORDER BY "工序序号") AS op_rank_in_batch, -- Global rank across all data for sequential processing ROW_NUMBER() OVER (ORDER BY "线体", "批次", "工序序号") AS global_rank, -- Pre-calculate total hours for this operation ("转机时间" + production_time + "收尾时间") AS total_hours FROM PreparedData ), -- Step 3: Recursive CTE to correct schedule times, simulating the Python loop CorrectedSchedule AS ( -- Anchor Member: Start with the first operation (global_rank = 1) SELECT rd.global_rank, rd."批次", rd."线体", rd."单板代码", rd."主工序", rd.op_rank_in_batch, rd.total_hours, -- Determine the initial start time COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')) AS corrected_start_time, -- Calculate the initial end time STRFTIME('%Y-%m-%d %H:%M:%S', COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')), '+' || rd.total_hours || ' hours') AS corrected_end_time, -- Initialize resource last-end-time trackers CASE WHEN rd."主工序" <> 'Test' THEN STRFTIME('%Y-%m-%d %H:%M:%S', COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')), '+' || rd.total_hours || ' hours') ELSE NULL END AS line_last_end, CASE WHEN rd."主工序" = 'Test' THEN STRFTIME('%Y-%m-%d %H:%M:%S', COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')), '+' || rd.total_hours || ' hours') ELSE NULL END AS item_test_last_end FROM RankedData rd WHERE rd.global_rank = 1 UNION ALL -- Recursive Member: Process subsequent operations one by one SELECT rd.global_rank, rd."批次", rd."线体", rd."单板代码", rd."主工序", rd.op_rank_in_batch, rd.total_hours, -- Determine the corrected start time based on dependencies ( SELECT MAX(ts) FROM ( -- Dependency 1: Previous operation in the same batch SELECT cs.corrected_end_time FROM CorrectedSchedule cs WHERE cs."批次" = rd."批次" AND cs.op_rank_in_batch = rd.op_rank_in_batch - 1 UNION ALL -- Dependency 2: Resource availability (line or test) SELECT CASE WHEN rd."主工序" = 'Test' THEN (SELECT MAX(cs2.item_test_last_end) FROM CorrectedSchedule cs2 WHERE cs2."单板代码" = rd."单板代码") ELSE (SELECT MAX(cs2.line_last_end) FROM CorrectedSchedule cs2 WHERE cs2."线体" = rd."线体") END UNION ALL -- Dependency 3: Its own original start time (or now if null) SELECT COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')) ) AS times(ts) ) AS corrected_start_time, -- Calculate the new end time based on the corrected start time STRFTIME('%Y-%m-%d %H:%M:%S', (SELECT MAX(ts) FROM ( SELECT cs.corrected_end_time FROM CorrectedSchedule cs WHERE cs."批次" = rd."批次" AND cs.op_rank_in_batch = rd.op_rank_in_batch - 1 UNION ALL SELECT CASE WHEN rd."主工序" = 'Test' THEN (SELECT MAX(cs2.item_test_last_end) FROM CorrectedSchedule cs2 WHERE cs2."单板代码" = rd."单板代码") ELSE (SELECT MAX(cs2.line_last_end) FROM CorrectedSchedule cs2 WHERE cs2."线体" = rd."线体") END UNION ALL SELECT COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')) ) AS times(ts)), '+' || rd.total_hours || ' hours' ) AS corrected_end_time, -- Update resource trackers for the next iteration CASE WHEN rd."主工序" <> 'Test' THEN STRFTIME('%Y-%m-%d %H:%M:%S', (SELECT MAX(ts) FROM (SELECT cs.corrected_end_time FROM CorrectedSchedule cs WHERE cs."批次" = rd."批次" AND cs.op_rank_in_batch = rd.op_rank_in_batch - 1 UNION ALL SELECT CASE WHEN rd."主工序" = 'Test' THEN (SELECT MAX(cs2.item_test_last_end) FROM CorrectedSchedule cs2 WHERE cs2."单板代码" = rd."单板代码") ELSE (SELECT MAX(cs2.line_last_end) FROM CorrectedSchedule cs2 WHERE cs2."线体" = rd."线体") END UNION ALL SELECT COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime'))) AS times(ts)), '+' || rd.total_hours || ' hours') ELSE (SELECT MAX(cs2.line_last_end) FROM CorrectedSchedule cs2 WHERE cs2."线体" = rd."线体") END, CASE WHEN rd."主工序" = 'Test' THEN STRFTIME('%Y-%m-%d %H:%M:%S', (SELECT MAX(ts) FROM (SELECT cs.corrected_end_time FROM CorrectedSchedule cs WHERE cs."批次" = rd."批次" AND cs.op_rank_in_batch = rd.op_rank_in_batch - 1 UNION ALL SELECT CASE WHEN rd."主工序" = 'Test' THEN (SELECT MAX(cs2.item_test_last_end) FROM CorrectedSchedule cs2 WHERE cs2."单板代码" = rd."单板代码") ELSE (SELECT MAX(cs2.line_last_end) FROM CorrectedSchedule cs2 WHERE cs2."线体" = rd."线体") END UNION ALL SELECT COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime'))) AS times(ts)), '+' || rd.total_hours || ' hours') ELSE (SELECT MAX(cs2.item_test_last_end) FROM CorrectedSchedule cs2 WHERE cs2."单板代码" = rd."单板代码") END FROM RankedData rd JOIN CorrectedSchedule cs ON rd.global_rank = cs.global_rank + 1 ), -- Step 4: Combine final schedule with other data and calculate daily outputs FinalData AS ( SELECT rd.*, cs.corrected_start_time, cs.corrected_end_time, CASE WHEN rd."入库工序" = '是' THEN DATE(cs.corrected_end_time) ELSE NULL END AS "入库时间" FROM RankedData rd JOIN CorrectedSchedule cs ON rd.global_rank = cs.global_rank ), -- Step 5: Calculate the output for each of the next 7 days DailyOutputCalculation AS ( SELECT f.*, (SELECT "计调员" FROM part_category pc WHERE pc."单板代码" LIKE f."单板代码" || '%' AND pc."工厂" = f."工厂" LIMIT 1) AS "责任人", -- Logic to distribute remaining quantity over the plan duration for the next 7 days CASE WHEN f."入库工序" = '是' AND JULIANDAY(DATE('now', '+0 days')) BETWEEN JULIANDAY(f.corrected_start_time) AND JULIANDAY(f.corrected_end_time) THEN ROUND(f."剩余数量" / (JULIANDAY(f.corrected_end_time) - JULIANDAY(f.corrected_start_time) + 1)) ELSE 0 END AS day_1_output, CASE WHEN f."入库工序" = '是' AND JULIANDAY(DATE('now', '+1 days')) BETWEEN JULIANDAY(f.corrected_start_time) AND JULIANDAY(f.corrected_end_time) THEN ROUND(f."剩余数量" / (JULIANDAY(f.corrected_end_time) - JULIANDAY(f.corrected_start_time) + 1)) ELSE 0 END AS day_2_output, CASE WHEN f."入库工序" = '是' AND JULIANDAY(DATE('now', '+2 days')) BETWEEN JULIANDAY(f.corrected_start_time) AND JULIANDAY(f.corrected_end_time) THEN ROUND(f."剩余数量" / (JULIANDAY(f.corrected_end_time) - JULIANDAY(f.corrected_start_time) + 1)) ELSE 0 END AS day_3_output, CASE WHEN f."入库工序" = '是' AND JULIANDAY(DATE('now', '+3 days')) BETWEEN JULIANDAY(f.corrected_start_time) AND JULIANDAY(f.corrected_end_time) THEN ROUND(f."剩余数量" / (JULIANDAY(f.corrected_end_time) - JULIANDAY(f.corrected_start_time) + 1)) ELSE 0 END AS day_4_output, CASE WHEN f."入库工序" = '是' AND JULIANDAY(DATE('now', '+4 days')) BETWEEN JULIANDAY(f.corrected_start_time) AND JULIANDAY(f.corrected_end_time) THEN ROUND(f."剩余数量" / (JULIANDAY(f.corrected_end_time) - JULIANDAY(f.corrected_start_time) + 1)) ELSE 0 END AS day_5_output, CASE WHEN f."入库工序" = '是' AND JULIANDAY(DATE('now', '+5 days')) BETWEEN JULIANDAY(f.corrected_start_time) AND JULIANDAY(f.corrected_end_time) THEN ROUND(f."剩余数量" / (JULIANDAY(f.corrected_end_time) - JULIANDAY(f.corrected_start_time) + 1)) ELSE 0 END AS day_6_output, CASE WHEN f."入库工序" = '是' AND JULIANDAY(DATE('now', '+6 days')) BETWEEN JULIANDAY(f.corrected_start_time) AND JULIANDAY(f.corrected_end_time) THEN ROUND(f."剩余数量" / (JULIANDAY(f.corrected_end_time) - JULIANDAY(f.corrected_start_time) + 1)) ELSE 0 END AS day_7_output FROM FinalData f ) -- Final Step: Insert the processed data into the permanent table INSERT INTO daily_output_plan_final ( "批次", "指令", "线体", "单板代码", "单板名称", "计划数量", "产出数量", "剩余数量", "计划开始时间", "计划结束时间", "实际开始时间", "修正后计划开始时间", "修正后计划结束时间", "主工序", "工序序号", "入库工序", "入库时间", "产品大类", "工厂", "责任人", "day_1_output", "day_2_output", "day_3_output", "day_4_output", "day_5_output", "day_6_output", "day_7_output" ) SELECT "批次", "指令", "线体", "单板代码", "单板名称", "计划数量", "产出数量", "剩余数量", "计划开始时间", "计划结束时间", "实际开始时间", corrected_start_time AS "修正后计划开始时间", corrected_end_time AS "修正后计划结束时间", "主工序", "工序序号", "入库工序", "入库时间", "产品大类", "工厂", "责任人", day_1_output, day_2_output, day_3_output, day_4_output, day_5_output, day_6_output, day_7_output FROM DailyOutputCalculation;
07-31
请你根据以下题目大意为我提供对应的C++代码,要求有详细的中文注释和代码尽量通俗易懂 # P2985 [USACO10FEB] Chocolate Eating S ## 题目描述 Bessie has received N (1 <= N <= 50,000) chocolates from the bulls, but doesn't want to eat them too quickly, so she wants to plan out her chocolate eating schedule for the next D (1 <= D <= 50,000) days in order to maximize her minimum happiness level over the set of those days. Bessie's happiness level is an integer that starts at 0 and halves (rounding down if necessary) over night as she sleeps. However, when she eats chocolate i, her happiness level increases by integer H\_i (1 <= H\_i <= 1,000,000). If she eats chocolates on a day, her happiness for that day is considered the happiness level after she eats the chocolates. Bessie insists that she eat the chocolates in the order that she received them. If more than one optimal solution exists, print any one of them. Consider a sequence of 5 chocolates to be eaten over a period of 5 days; they respectively bring happiness (10, 40, 13, 22, 7). If Bessie eats the first chocolate (10 happiness) on the first day and then waits to eat the others, her happiness level is 10 after the first day. Here is the complete schedule which turns out to maximize her minimum happiness: Day Wakeup happiness Happiness from eating Bedtime happiness 1 0 10+40 50 2 25 --- 25 3 12 13 25 4 12 22 34 5 17 7 24 The minimum bedtime happiness is 24, which turns out to be the best Bessie can do. Bessie 拿到了 $N$($1 \leq N \leq 5\times 10 ^ 4$)块巧克力。她决定想个办法吃掉这些巧克力,使得它在吃巧克力的这段时间里,最不开心的一天尽可能的开心。并且一共吃 $D$($1 \leq D \leq 5\times 10 ^ 4$)天。 每块巧克力有一个开心值 $H_i$($1 \leq H_i \leq 10 ^ 6$),当某天你吃下那块巧克力时,你将获得那块巧克力的开心值。每一天的开心值是所有当天吃掉的巧克力的总开心值之和。每天晚上 Bessie 睡觉之后,它的开心值会减半。也就是说,比如昨天 Bessie 的开心值为 $50$,那么今天早上一醒来就会有 $25$ 点的开心值,舍去小数点后数字。另外,Bessie 还有一个怪癖,她喜欢按照巧克力本来的排列顺序吃。 Bessie 第一天的开心值为 $0$,求一个每天吃巧克力的方案,使得 Bessie 最不开心的一天尽可能的开心。 ## 输入格式 \* Line 1: Two space separated integers: N and D \* Lines 2..N+1: Line i+1 contains a single integer: H\_i 第一行:两个整数 $N$ 和 $D$,中间用空格分隔。 第 $2$ 行至第 $N + 1$ 行:每行一个整数,第 $i + 1$ 行表示 $H_i$ 的值。 ## 输出格式 \* Line 1: A single integer, the highest Bessie's minimum happiness can be over the next D days \* Lines 2..N+1: Line i+1 contains an integer that is the day on which Bessie eats chocolate i 第一行:一个整数,表示 Bessie 在 $D$ 天中最不开心的一天最大可能的开心值。 第 $2$ 至第 $n + 1$ 行,每行一个整数,第 $i + 1$ 行表示 Bessie 吃第 $i$ 块巧克力的日期。 ## 输入输出样例 #1 ### 输入 #1 ``` 5 5 10 40 13 22 7 ``` ### 输出 #1 ``` 24 1 1 3 4 5 ```
05-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值