IOI 2007 Aliens
今天开始做IOI的学习笔记, 就从我出生的年份开始吧
IOI 2007 Aliens:
给你三个整数 N, X, Y 表示网格有N * N大, 而 (X,Y)是黑色的图
那个图是这样的:
#.#.#
.#.#.
#.#.#
.#.#.
#.#.#
#表示黑色 .表示白色
而整个N*N的网格只有一个这样的图形, 每个箱子有一个偶数 M 为长度和宽度
询问: 问(x,y) 是不是黑色的
300次询问内寻找到中间点
很容易看出来是二分吧? (一看题目就感觉到了)
先考虑往右边边走:一开始为(x,y)
如果说现在的步数为 L, 那么如果下一个 2*L不是黑色的了就代表说我们的边界点必须在[L,2*L)
那么就代表我们可以倍增法找到第一个 L是黑色 2*L是白色的
为什么我们可以保证这样不会询问到下一个格子呢
如果说 x+L 是黑的,代表(x+L) 还是在格子里, 证明 L<M, 同时去下一个格子最少需要 M+1,因此 x+2*L不可能到达下一个格子
OK, 所以我们找出来我们的四个边界点了
因此我们的四个角落以及中间点也找出来了
接下来就询问四个方向有多少个格子
然后做一点暴力。 答案就出来了。
需要注意的东西:
1. examine必须要写到下一行 & fflush(stdout)
2. 如果我现在x+1就是白的了要特判
评价: erm 难度适中但是打出来代码很幸苦
具体代码的submission:
https://oj.uz/submission/867633
抱歉没有注释但是我觉得我的代码不会丑, 应该能读懂
分类:
IOI
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端