暑假NOIP期末考试【1】—— Phantom

Phantom

?题目名称: phantom

?时间限制:1 秒

?空间限制:256 MiB

题目描述

在一个无限大的棋盘上,排列着 n * n 枚棋子,形成一个 n 行 n 列的方阵。棋子可以横向或者纵向移动,移动方式是越过一个相邻的棋子,落入同一方向上的下一个空闲的格子里,同时,移除被越过的棋子。现在,我们想知道,是否有可能通过若干次操作,使得棋盘上仅剩一枚棋子。

例如,当 n = 2 时,有如下操作方法:

…. …. …. ….

.OO. => …O => …O => ….

.OO. .OO. …O ….

…. …. …. …O

输入格式

输入文件的第一行包含一个整数,表示测试数据的数目。

每个测试数据占一行,包含单独的一个整数 n。

输出格式

对于每个测试数据,在单独的一行内输出答案。

如果有可能使得棋盘上仅剩一枚棋子,输出 YES ;否则输出 NO 。

样例输入2

2

3

样例输出YES

NO

数据范围与约定

?对于 30% 的数据,n ≤ 6。

?对于 100% 的数据,n ≤ 1 000 000 000,测试数据不超过 1000 组。



对于这道题很多人最初的感觉就是搜索嘛,不过看看这大数据,n<=1 000 000 000,怎么可能。只能是O(1)的时间复杂度啊。所以,直觉告诉我,或者说是个人都会知道,这道题是一道有规律可循的题。。

All jokes aside,先说一下老师介绍的第一种方法:

对于一个N=2的4*4矩阵来说,我们很容易的就能把它变成我们想要的情况,那么是不是可以把它作为一个基本模型,或者说让它成为我们的期望装态,这种思想类似于数学中的“归纳法”(这一点可以好好体会一下)。

经过以上的分析后,现在我们可以动手实践一下了。有句话叫什么来着“失败是通往成功的必经之路”,所以你会发现,当N=3的时候,怎么也不能实现。当时当你画4*4的情况的时候,也许在某种情况会出现一个完整的2*2,而这正是你想要的。

而我们知道只剩下一个点当然也是可以的,所以同理,当N=5的时候就会出现下面的情况:

这时候大概就会找到一些规律了,也就是我们都是每三个三个消掉的,似乎只要有三个连续的就可以弄掉,不过事实上并非这样简单,条件是得出现一个‘L’形状,也就是说这三个点的两端的两边至少要有一个点,这样这三个点才可以消掉。而且我们举得4,5这两个例子大可以概括所有的情况(事实证明,不要问我为什么,自己试试就知道了)。

就像这个样子,对于任意的N(也并非任意),都可以转化为4或5的形式,进而转化到我们的基本模型,1或2。

但到这里,可能你还会有些疑问,也许你还在问为什么为什么,因为我们越过了一个很神奇的数字,3。

因为,如果按照之前的思想,那么三是不是应该就没了?——不过这当然是不可能的啊,为什么呢?再花哨的语言也说不清事物的本质,因此这种问题还是需要自己实践一下,这样自然会明白。

这回可以扩展到任意的N了,对于一个(N^2)不能被3整除的数,我们都会处理,而能被3整除的数最终不能化成1或2,所以不可以。

Ex——方法2

之前就说过,异或是一个很神奇的东西。在计算机中,异或属于位运算的一种,并且利用二进制可以很快的计算出来。不过我们在这道题用的并不是这个性质,而是下面的这三种关系:

1^2=3

2^3=1

3^1=2

也就是说,1,2,3的异或是互相转换的。

这样,我们可以把每个格子标号

以N=6为例

1 2 3 1 2 3

3 1 2 3 1 2

2 3 1 2 3 1

1 2 3 1 2 3

3 1 2 3 1 2

2 3 1 2 3 1

不管你在这个矩阵中找到了什么规律,我想告诉你的是,每个点的上下左右都是两个不同的数字,这样有什么好处呢?想想看,我们最终的状态是什么?1或者2或者3对吧,而我们知道现在的总亦或值为0,所以不管我们怎样移动都不能出现单独的一个数字。而这个结论正好与第一个方法中的能被3整除相调和。

PS:异或的性质很重要,理解深刻的话对于做题来讲十分有用,如果一道题你能想出来可以用如异或一样的位运算方法的时候,你就是神犇。

最形象的方法——方法3

用最本质的想法, OO* —>**O 是我们移动的根本,那么是否我们可以抽象出一个模型(以5为例):

为什么这样做呢?可以看到,当我每次移动一步的时候,每个颜色的点都会对应的增加一个或者减少一个。如果这个可以理解的话,那么我说它们的奇偶性都会随之改变,且同时变为相反的状态,按照上图:

BLUE: 8

BLACK: 8

WHILE:9

也就是”偶偶奇“,而我们的目的状态就是”001“—>‘偶偶奇’。很显然只要我的黑、蓝、白三个数目不相等就好。这样就很容易理解为什么能被3整除就不行了,因为在3*3的格子中,黑蓝白三种颜色的数目始终是相等的,因此这种方法就很好地解决了我们方法1中可能存在疑惑的地方。所以就很好理解了为什么N%3==0就可以,else 不行。



Code:

太简单了,就不贴了。

Summary:

做题前一定要看看数据范围,往往数据范围就能提示你改用什么算法来作答,同时思想不能死板,不要往模板题上想,灵感可能就在电光火石间产生。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 16:11:26

暑假NOIP期末考试【1】—— Phantom的相关文章

【bzoj4868】[Shoi2017]期末考试 前缀和

题目描述 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程公布成绩,每等待一天就会产生C不愉快度.对于第i门课程,按照原本的计划,会在第bi天公布成绩.有如下两种操作可以调整公布成绩的时间:1.将负责课程X的部分老师调整到课程Y,调整之后公布课程X成绩的时间推迟一天,公布课程Y成绩的时间提前一天:每次操作产生A不愉快度.2.增加一部分老师

高等代数期末考试

高等代数的最后一站,有惊无险. 高等代数期末考试试题

数据库期末考试复习题 第一章

作者 : Dolphin 原文地址:http://blog.csdn.net/qingdujun/article/details/27820507 一.单项选择题: 1. 位于用户和操作系统之间的一层数据管理软件是  C    . A.DBS  B.DB  C.DBMS  D.MIS 2. 数据库系统中的数据模型通常由    A     三部分组成. A.数据结构.数据操作和完整性约束 B.数据定义.数据操作和安全性约束 C.数据结构.数据管理和数据保护 D.数据定义.数据管理和运行控制 3. 

复旦大学2016--2017学年第二学期(16级)高等代数II期末考试第七大题解答

七.(本题10分)  设 $n$ 阶复方阵 $A$ 的特征多项式为 $f(\lambda)$, 复系数多项式 $g(\lambda)$ 满足 $(f(\lambda),g'(\lambda))=1$. 证明: $A$ 可对角化的充要条件是 $g(A)$ 可对角化. 证明  先证必要性. 设 $A$ 可对角化, 即存在非异阵 $P$, 使得 $P^{-1}AP=\Lambda=\mathrm{diag}\{\lambda_1,\lambda_2,\cdots,\lambda_n\}$ 为对角阵,

中国MOOC_面向对象程序设计——Java语言_期末考试编程题_1细胞自动机

期末考试编程题 返回 这是期末考试的编程题 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成绩. 1 细胞自动机(30分) 题目内容: 这是细胞自动机的非图形版本.细胞自动机是指在一个二维网格内,每一个网格是一个细胞.每个细胞有活和死两种状态. 初始时刻,有些细胞是活的,有些细胞是死的.自动机的每一步,根据每个细胞周围8个格子内的其他细胞的生存情况决定这个细胞下一步是否存活.具体的规则如下:

codevs 2915 期末考试

时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 期末考试要来了,某同学正在努力复习. 他要复习N个知识点,每个知识点需要一定的知识做基础. 现给你一个AOV网,其中有M条边<Ai,Bi>. 问他能考得怎样?(假设他只要复习了就不会出错,没复习就什么也不会) 输入描述 Input Description 两个正整数N,M M行,Ai  Bi. 输出描述 Output Description 若能考满分,输出Oh,yeah! 若能及

Linux系统管理期末考试小结

这学期主要讲Linux系统管理,内容分为六章:了解并安装Linux系统,文件和目录管理,用户.组和权限管理,磁盘与文件系统管理,系统软件包管理,系统进程和服务管理.期末考试要求每个学生在自己的笔记本电脑里新建虚拟机,安装rhel6系统,并设为桥接模式,然后按照考题要求进行实践操作.最后评分时,我编写了一个可以自动评分的脚本,并将脚本程序在我电脑的Linux虚拟机里设为NFS共享,然后依次在每个学生的虚拟机通过NFS共享,复制脚本到本地进行评分.试题和脚本我已在附件里共享,有兴趣的朋友可以下载练习

复旦大学2015--2016学年第二学期高等代数II期末考试情况分析

一.期末考试成绩班级前几名 胡晓波(90).杨彦婷(88).宋卓卿(85).唐指朝(84).陈建兵(83).宋沛颖(82).王昊越(81).白睿(80).韩沅伯(80).王艺楷(80).张漠林(80).张子涵(80) 二.总成绩计算方法 平时成绩根据交作业的次数决定,本学期共交作业12次,10次以上(包括10次)100分,少一次扣10分. 总成绩=平时成绩*20%+期中考试成绩*20%+期末考试成绩*60% 三.最终成绩及人数 最终成绩 人数 A 26 A- 1 B+ 14 B 16 B- 20

nyoj757 期末考试 (优先队列)

题目757 题目信息 运行结果 本题排行 讨论区 期末考试 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没 交作业就会扣期末成绩的分数,假设完成每门功课需要一天的时间,你能帮助小T扣除的分数最小吗? 输入 输入n,表示n门功课(n<2000),接下来n行,每行两个数a,b,分别表示交作业的最后期限,迟交扣除的分数. (以文件结尾) 输出 输出扣除的最小分数. 样例输入 3