JZ The Second Day 总结

本文记录了一场模拟赛的经历,包括四道题目的解题过程及感悟。重点讲述了如何避免被题目表面迷惑,以及面对非整数数据时的注意事项。

前言

第一题的坑真的无敌再加上被第三题的表面迷惑了,结果用了一个多小时打了一个0分的程序


模拟赛进行ing

第一题——密码

看到数据 每个数不小于1024?Really?高精乘单精啊~奇了怪了,这么水,于是打了二十分钟

第二题(没改完)

看完题目,不会,于是做完第一题直接跳到第三题

第三题——页

好水的样子,做了一个多小时,错了~,真尴尬

第四题——景点中心

n遍spfa?floyd?搜索?


模拟赛进行ed

第一题
30分?!?!高精乘单精错了?~?~ 旁边dalao默默地说:数据错了,不是1024而是102424于是一脸懵b地打完了高精乘高精,然而不知道为什么错了,改了一个下午~,最后还是把高精乘重打了一遍,改完之后旁边大佬又默默地说了一句:真的是感动JZ
我太失败了
第二题
线段树维护+扫面线(真的没学扫面线)
第三题
深搜打了一个小时都不到,WA了一次就A了
第四题
听大佬讲后发现真的不难,但是最后两个小时还是交给了它,于是最难的第二题没改出来


总结

以后看到不是整十,整百,整千,整万,整亿,整兆(上瘾了)的数,如:105,109,107等应该是1055,1099,1077
不要被题目表面迷惑······

转载于:https://www.cnblogs.com/Juruo-HJQ/p/9306879.html

; C51???????? ; ????: ; LCD??? = P0 ; LCD???: RS=P2.0, RW=P2.1, EN=P2.2 ; ??: SET=P3.0, INC=P3.1, DEC=P3.2, MODE=P3.3 ; ??RAM?? SECOND EQU 30H ; ? MINUTE EQU 31H ; ? HOUR EQU 32H ; ? DAY EQU 33H ; ? MONTH EQU 34H ; ? YEAR EQU 35H ; ? WEEKDAY EQU 36H ; ??(0=??,1=??...6=??) ALARM_H EQU 37H ; ??? ALARM_M EQU 38H ; ??? MODE_FLAG EQU 39H ; ????(0=??,1=????,2=????,3=????) CURSOR EQU 3AH ; ?????? TICK_CNT EQU 3BH ; 50ms?? SEC_FLAG EQU 3CH ; ???? ORG 0000H LJMP MAIN ORG 000BH ; ???0???? LJMP TIMER0_ISR MAIN: MOV SP, #60H ; ?????? LCALL INIT_VARS ; ????? LCALL LCD_INIT ; ???LCD LCALL TIMER_INIT ; ?????? MAIN_LOOP: LCALL KEY_SCAN ; ???? LCALL DISPLAY_TIME ; ???? LCALL CHECK_ALARM ; ???? SJMP MAIN_LOOP ; ????? INIT_VARS: MOV SECOND, #00H ; ???? 00:00:00 MOV MINUTE, #00H MOV HOUR, #00H MOV DAY, #01H ; ???? 01/01/00 MOV MONTH, #01H MOV YEAR, #00H MOV WEEKDAY, #01H ; ?? MOV ALARM_H, #07H ; ??07:00 MOV ALARM_M, #00H MOV MODE_FLAG, #00H MOV CURSOR, #00H MOV TICK_CNT, #00H MOV SEC_FLAG, #00H RET ; ?????? TIMER_INIT: MOV TMOD, #01H ; ???0??1 MOV TH0, #3CH ; 50ms??(11.0592MHz) MOV TL0, #0B0H SETB TR0 ; ????? SETB ET0 ; ??????? SETB EA ; ???? RET ; ???0?????? TIMER0_ISR: PUSH ACC MOV TH0, #3CH ; ???? MOV TL0, #0B0H INC TICK_CNT MOV A, TICK_CNT CJNE A, #20, TIMER_EXIT ; 50ms*20=1s MOV TICK_CNT, #00H SETB SEC_FLAG ; ????? ; ???? INC SECOND MOV A, SECOND CJNE A, #60, TIMER_EXIT MOV SECOND, #00H INC MINUTE MOV A, MINUTE CJNE A, #60, TIMER_EXIT MOV MINUTE, #00H INC HOUR MOV A, HOUR CJNE A, #24, TIMER_EXIT MOV HOUR, #00H ; ??????? INC DAY INC WEEKDAY MOV A, WEEKDAY CJNE A, #7, CHECK_DAY MOV WEEKDAY, #0 CHECK_DAY: MOV A, MONTH CJNE A, #2, NOT_FEB ; ??2? MOV A, YEAR ANL A, #03H ; ??????(??4??) JNZ FEB_28 MOV A, DAY CJNE A, #30, TIMER_EXIT SJMP MONTH_END FEB_28: MOV A, DAY CJNE A, #29, TIMER_EXIT SJMP MONTH_END NOT_FEB: MOV A, MONTH CJNE A, #4, CHECK_30 SJMP CHECK_31 CHECK_30: CJNE A, #6, CHECK_31 SJMP CHECK_31 ; 30??? MOV A, DAY CJNE A, #31, TIMER_EXIT SJMP MONTH_END CHECK_31: ; 31??? MOV A, DAY CJNE A, #32, TIMER_EXIT MONTH_END: MOV DAY, #01H INC MONTH MOV A, MONTH CJNE A, #13, TIMER_EXIT MOV MONTH, #01H INC YEAR MOV A, YEAR CJNE A, #100, TIMER_EXIT MOV YEAR, #00H TIMER_EXIT: POP ACC RETI ; LCD??? LCD_INIT: LCALL DELAY ; ??LCD???? MOV A, #38H ; 8???,2???,5x7?? LCALL LCD_CMD MOV A, #0CH ; ???,??? LCALL LCD_CMD MOV A, #06H ; ????,??? LCALL LCD_CMD MOV A, #01H ; ?? LCALL LCD_CMD RET ; LCD?????? LCD_CMD: MOV P0, A ; ????P0 CLR P2.0 ; RS=0(??) CLR P2.1 ; RW=0(?) SETB P2.2 ; EN=1 LCALL DELAY ; ??? CLR P2.2 ; EN=0 LCALL DELAY RET ; LCD?????? LCD_DATA: MOV P0, A ; ????P0 SETB P2.0 ; RS=1(??) CLR P2.1 ; RW=0(?) SETB P2.2 ; EN=1 LCALL DELAY ; ??? CLR P2.2 ; EN=0 LCALL DELAY RET ; ?????? DISPLAY_TIME: MOV A, #80H ; ??????? LCALL LCD_CMD ; ???? HH:MM:SS MOV A, HOUR LCALL DISP_BCD MOV A, #':' ; ???? LCALL LCD_DATA MOV A, MINUTE LCALL DISP_BCD MOV A, #':' LCALL LCD_DATA MOV A, SECOND LCALL DISP_BCD ; ???? YY/MM/DD MOV A, #0C0H ; ??????? LCALL LCD_CMD MOV A, YEAR LCALL DISP_BCD MOV A, #'/' LCALL LCD_DATA MOV A, MONTH LCALL DISP_BCD MOV A, #'/' LCALL LCD_DATA MOV A, DAY LCALL DISP_BCD ; ???? MOV A, #0CAH ; ????11? LCALL LCD_CMD MOV A, WEEKDAY ADD A, #'0' ; ???ASCII LCALL LCD_DATA ; ?????? MOV A, #8FH ; ????? LCALL LCD_CMD MOV A, #'A' ; ??A?????? LCALL LCD_DATA RET ; ??BCD?(????) DISP_BCD: MOV R0, A SWAP A ; ????? ANL A, #0FH ADD A, #'0' LCALL LCD_DATA MOV A, R0 ; ????? ANL A, #0FH ADD A, #'0' LCALL LCD_DATA RET ; ???? KEY_SCAN: JB P3.0, KEY_INC ; SET???? LCALL DELAY_10MS JB P3.0, KEY_INC JNB P3.0, $ ; ???? ; ???? MOV A, MODE_FLAG INC A CJNE A, #4, SET_MODE MOV A, #0 SET_MODE: MOV MODE_FLAG, A MOV CURSOR, #0 ; ?????? RET KEY_INC: JB P3.1, KEY_DEC ; INC???? LCALL DELAY_10MS JB P3.1, KEY_DEC JNB P3.1, $ ; ???? ; ????????? MOV A, MODE_FLAG JZ KEY_EXIT ; ??????? ; ?????? CJNE A, #1, CHK_DATE LCALL INC_TIME RET CHK_DATE: CJNE A, #2, CHK_ALARM LCALL INC_DATE RET CHK_ALARM: CJNE A, #3, KEY_EXIT LCALL INC_ALARM RET KEY_DEC: JB P3.2, KEY_MODE ; DEC???? LCALL DELAY_10MS JB P3.2, KEY_MODE JNB P3.2, $ ; ???? ; ????????? MOV A, MODE_FLAG JZ KEY_EXIT ; ?????? CJNE A, #1, DEC_DATE LCALL DEC_TIME RET DEC_DATE: CJNE A, #2, DEC_ALARM LCALL DEC_DATE RET DEC_ALARM: CJNE A, #3, KEY_EXIT LCALL DEC_ALARM RET KEY_MODE: JB P3.3, KEY_EXIT ; MODE?(?????) LCALL DELAY_10MS JB P3.3, KEY_EXIT JNB P3.3, $ ; ???? MOV A, MODE_FLAG JZ KEY_EXIT ; ??????? ; ?????????? INC CURSOR MOV A, CURSOR CJNE A, #3, KEY_EXIT ; ??/???3? MOV CURSOR, #0 KEY_EXIT: RET ; ????? INC_TIME: MOV A, CURSOR JZ INC_HOUR CJNE A, #1, INC_SEC ; ???? INC MINUTE MOV A, MINUTE CJNE A, #60, INC_EXIT MOV MINUTE, #0 RET INC_HOUR: INC HOUR MOV A, HOUR CJNE A, #24, INC_EXIT MOV HOUR, #0 RET INC_SEC: INC SECOND MOV A, SECOND CJNE A, #60, INC_EXIT MOV SECOND, #0 INC_EXIT: RET ; ????? INC_DATE: MOV A, CURSOR JZ INC_YEAR CJNE A, #1, INC_DAY ; ???? INC MONTH MOV A, MONTH CJNE A, #13, INC_EXIT MOV MONTH, #1 RET INC_YEAR: INC YEAR MOV A, YEAR CJNE A, #100, INC_EXIT MOV YEAR, #0 RET INC_DAY: INC DAY MOV A, DAY CJNE A, #32, INC_EXIT MOV DAY, #1 RET ; ????? INC_ALARM: MOV A, CURSOR JZ INC_ALARM_H ; ???? INC ALARM_M MOV A, ALARM_M CJNE A, #60, INC_EXIT MOV ALARM_M, #0 RET INC_ALARM_H: INC ALARM_H MOV A, ALARM_H CJNE A, #24, INC_EXIT MOV ALARM_H, #0 RET ; ?????(??????,?) DEC_TIME: ; ????INC_TIME???? RET ; ???? CHECK_ALARM: MOV A, HOUR CJNE A, ALARM_H, ALARM_EXIT MOV A, MINUTE CJNE A, ALARM_M, ALARM_EXIT ; ????(?????LED??) CPL P1.7 ; ??P1.7??LED ALARM_EXIT: RET ; ????? DELAY: MOV R6, #50 DL1: MOV R7, #200 DL2: DJNZ R7, DL2 DJNZ R6, DL1 RET DELAY_10MS: MOV R5, #20 DL3: MOV R6, #250 DL4: DJNZ R6, DL4 DJNZ R5, DL3 RET END 这段代码烧录后9到0时出现;=?>等符号,且减法无用,修改代码
07-04
; C51电子时钟汇编程序 ; 硬件连接: ; LCD数据口 = P0 ; LCD控制线: RS=P2.0, RW=P2.1, EN=P2.2 ; 按键: SET=P3.0, INC=P3.1, DEC=P3.2, MODE=P3.3 ; 内部RAM分配 SECOND EQU 30H ; 秒 MINUTE EQU 31H ; 分 HOUR EQU 32H ; 时 DAY EQU 33H ; 日 MONTH EQU 34H ; 月 YEAR EQU 35H ; 年 WEEKDAY EQU 36H ; 星期(0=周日,1=周一…6=周六) ALARM_H EQU 37H ; 闹钟时 ALARM_M EQU 38H ; 闹钟分 MODE_FLAG EQU 39H ; 模式标志(0=正常,1=设置时间,2=设置日期,3=设置闹钟) CURSOR EQU 3AH ; 当前设置位置 TICK_CNT EQU 3BH ; 50ms计数 SEC_FLAG EQU 3CH ; 秒标志位 ORG 0000H LJMP MAIN ORG 000BH ; 定时器0中断入口 LJMP TIMER0_ISR MAIN: MOV SP, #60H ; 设置堆栈指针 LCALL INIT_VARS ; 初始化变量 LCALL LCD_INIT ; 初始化LCD LCALL TIMER_INIT ; 初始化定时器 MAIN_LOOP: LCALL KEY_SCAN ; 扫描按键 LCALL DISPLAY_TIME ; 显示时间 LCALL CHECK_ALARM ; 检查闹钟 SJMP MAIN_LOOP ; 初始化变量 INIT_VARS: MOV SECOND, #00H ; 初始时间 00:00:00 MOV MINUTE, #00H MOV HOUR, #00H MOV DAY, #01H ; 初始日期 01/01/00 MOV MONTH, #01H MOV YEAR, #00H MOV WEEKDAY, #01H ; 周一 MOV ALARM_H, #07H ; 闹钟07:00 MOV ALARM_M, #00H MOV MODE_FLAG, #00H MOV CURSOR, #00H MOV TICK_CNT, #00H MOV SEC_FLAG, #00H RET ; 初始化定时器 TIMER_INIT: MOV TMOD, #01H ; 定时器0模式1 MOV TH0, #3CH ; 50ms定时(11.0592MHz) MOV TL0, #0B0H SETB TR0 ; 启动定时器 SETB ET0 ; 允许定时器中断 SETB EA ; 开总中断 RET ; 定时器0中断服务程序 TIMER0_ISR: PUSH ACC MOV TH0, #3CH ; 重装初值 MOV TL0, #0B0H INC TICK_CNT MOV A, TICK_CNT CJNE A, #20, TIMER_EXIT ; 50ms*20=1s MOV TICK_CNT, #00H SETB SEC_FLAG ; 置位秒标志 ; 更新时间 INC SECOND MOV A, SECOND CJNE A, #60, TIMER_EXIT MOV SECOND, #00H INC MINUTE MOV A, MINUTE CJNE A, #60, TIMER_EXIT MOV MINUTE, #00H INC HOUR MOV A, HOUR CJNE A, #24, TIMER_EXIT MOV HOUR, #00H ; 更新日期和星期 INC DAY INC WEEKDAY MOV A, WEEKDAY CJNE A, #7, CHECK_DAY MOV WEEKDAY, #0 CHECK_DAY: MOV A, MONTH CJNE A, #2, NOT_FEB ; 检查2月 MOV A, YEAR ANL A, #03H ; 简单闰年判断(能被4整除) JNZ FEB_28 MOV A, DAY CJNE A, #30, TIMER_EXIT SJMP MONTH_END FEB_28: MOV A, DAY CJNE A, #29, TIMER_EXIT SJMP MONTH_END NOT_FEB: MOV A, MONTH CJNE A, #4, CHECK_30 SJMP CHECK_31 CHECK_30: CJNE A, #6, CHECK_31 SJMP CHECK_31 ; 30天月份 MOV A, DAY CJNE A, #31, TIMER_EXIT SJMP MONTH_END CHECK_31: ; 31天月份 MOV A, DAY CJNE A, #32, TIMER_EXIT MONTH_END: MOV DAY, #01H INC MONTH MOV A, MONTH CJNE A, #13, TIMER_EXIT MOV MONTH, #01H INC YEAR MOV A, YEAR CJNE A, #100, TIMER_EXIT MOV YEAR, #00H TIMER_EXIT: POP ACC RETI ; LCD初始化 LCD_INIT: LCALL DELAY ; 等待LCD上电稳定 MOV A, #38H ; 8位数据,2行显示,5x7点阵 LCALL LCD_CMD MOV A, #0CH ; 开显示,关光标 LCALL LCD_CMD MOV A, #06H ; 地址递增,不移屏 LCALL LCD_CMD MOV A, #01H ; 清屏 LCALL LCD_CMD RET ; LCD写命令子程序 LCD_CMD: MOV P0, A ; 命令送到P0 CLR P2.0 ; RS=0(命令) CLR P2.1 ; RW=0(写) SETB P2.2 ; EN=1 LCALL DELAY ; 短延时 CLR P2.2 ; EN=0 LCALL DELAY RET ; LCD写数据子程序 LCD_DATA: MOV P0, A ; 数据送到P0 SETB P2.0 ; RS=1(数据) CLR P2.1 ; RW=0(写) SETB P2.2 ; EN=1 LCALL DELAY ; 短延时 CLR P2.2 ; EN=0 LCALL DELAY RET ; 显示时间日期 DISPLAY_TIME: MOV A, #80H ; 第一行起始地址 LCALL LCD_CMD ; 显示时间 HH:MM:SS MOV A, HOUR LCALL DISP_BCD MOV A, #':' ; 显示冒号 LCALL LCD_DATA MOV A, MINUTE LCALL DISP_BCD MOV A, #':' LCALL LCD_DATA MOV A, SECOND LCALL DISP_BCD ; 显示日期 YY/MM/DD MOV A, #0C0H ; 第二行起始地址 LCALL LCD_CMD MOV A, YEAR LCALL DISP_BCD MOV A, #'/' LCALL LCD_DATA MOV A, MONTH LCALL DISP_BCD MOV A, #'/' LCALL LCD_DATA MOV A, DAY LCALL DISP_BCD ; 显示星期 MOV A, #0CAH ; 第二行第11位 LCALL LCD_CMD MOV A, WEEKDAY ADD A, #'0' ; 转换为ASCII LCALL LCD_DATA ; 显示闹钟标志 MOV A, #8FH ; 第一行末尾 LCALL LCD_CMD MOV A, #'A' ; 显示A表示闹钟开启 LCALL LCD_DATA RET ; 显示BCD码(两位数字) DISP_BCD: MOV R0, A SWAP A ; 显示十位数 ANL A, #0FH ADD A, #‘0’ LCALL LCD_DATA MOV A, R0 ; 显示个位数 ANL A, #0FH ADD A, #‘0’ LCALL LCD_DATA RET ; 按键扫描 KEY_SCAN: JB P3.0, KEY_INC ; SET键按下? LCALL DELAY_10MS JB P3.0, KEY_INC JNB P3.0, $ ; 等待释放 ; 模式切换 MOV A, MODE_FLAG INC A CJNE A, #4, SET_MODE MOV A, #0 SET_MODE: MOV MODE_FLAG, A MOV CURSOR, #0 ; 重置光标位置 RET KEY_INC: JB P3.1, KEY_DEC ; INC键按下? LCALL DELAY_10MS JB P3.1, KEY_DEC JNB P3.1, $ ; 等待释放 ; 根据模式增加当前值 MOV A, MODE_FLAG JZ KEY_EXIT ; 正常模式不处理 ; 设置时间模式 CJNE A, #1, CHK_DATE LCALL INC_TIME RET CHK_DATE: CJNE A, #2, CHK_ALARM LCALL INC_DATE RET CHK_ALARM: CJNE A, #3, KEY_EXIT LCALL INC_ALARM RET KEY_DEC: JB P3.2, KEY_MODE ; DEC键按下? LCALL DELAY_10MS JB P3.2, KEY_MODE JNB P3.2, $ ; 等待释放 ; 根据模式减少当前值 MOV A, MODE_FLAG JZ KEY_EXIT ; 设置时间模式 CJNE A, #1, DEC_DATE LCALL DEC_TIME RET DEC_DATE: CJNE A, #2, DEC_ALARM LCALL DEC_DATE RET DEC_ALARM: CJNE A, #3, KEY_EXIT LCALL DEC_ALARM RET KEY_MODE: JB P3.3, KEY_EXIT ; MODE键(切换设置项) LCALL DELAY_10MS JB P3.3, KEY_EXIT JNB P3.3, $ ; 等待释放 MOV A, MODE_FLAG JZ KEY_EXIT ; 正常模式不处理 ; 在设置模式下移动光标 INC CURSOR MOV A, CURSOR CJNE A, #3, KEY_EXIT ; 时间/日期有3项 MOV CURSOR, #0 KEY_EXIT: RET ; 增加时间值 INC_TIME: MOV A, CURSOR JZ INC_HOUR CJNE A, #1, INC_SEC ; 增加分钟 INC MINUTE MOV A, MINUTE CJNE A, #60, INC_EXIT MOV MINUTE, #0 RET INC_HOUR: INC HOUR MOV A, HOUR CJNE A, #24, INC_EXIT MOV HOUR, #0 RET INC_SEC: INC SECOND MOV A, SECOND CJNE A, #60, INC_EXIT MOV SECOND, #0 INC_EXIT: RET ; 增加日期值 INC_DATE: MOV A, CURSOR JZ INC_YEAR CJNE A, #1, INC_DAY ; 增加月份 INC MONTH MOV A, MONTH CJNE A, #13, INC_EXIT MOV MONTH, #1 RET INC_YEAR: INC YEAR MOV A, YEAR CJNE A, #100, INC_EXIT MOV YEAR, #0 RET INC_DAY: INC DAY MOV A, DAY CJNE A, #32, INC_EXIT MOV DAY, #1 RET ; 增加闹钟值 INC_ALARM: MOV A, CURSOR JZ INC_ALARM_H ; 增加分钟 INC ALARM_M MOV A, ALARM_M CJNE A, #60, INC_EXIT MOV ALARM_M, #0 RET INC_ALARM_H: INC ALARM_H MOV A, ALARM_H CJNE A, #24, INC_EXIT MOV ALARM_H, #0 RET ; 减少时间值(类似增加函数,略) DEC_TIME: ; 实现类似INC_TIME但减少值 RET ; 检查闹钟 CHECK_ALARM: MOV A, HOUR CJNE A, ALARM_H, ALARM_EXIT MOV A, MINUTE CJNE A, ALARM_M, ALARM_EXIT ; 触发闹钟(此处简化为LED闪烁) CPL P1.7 ; 翻转P1.7控制LED ALARM_EXIT: RET ; 延时子程序 DELAY: MOV R6, #50 DL1: MOV R7, #200 DL2: DJNZ R7, DL2 DJNZ R6, DL1 RET DELAY_10MS: MOV R5, #20 DL3: MOV R6, #250 DL4: DJNZ R6, DL4 DJNZ R5, DL3 RET END这段有如下问题 1、9之后出现?;等字符 2,按键无反应 在原来的基础上修改代码,给我完整的改后的代码
07-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值