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矩阵来说。我们非常easy的就能把它变成我们想要的情况,那么是不是能够把它作为一个基本模型,或者说让它成为我们的期望装态,这样的思想相似于数学中的“归纳法”(这一点能够好好体会一下)。

经过以上的分析后,如今我们能够动手实践一下了。

有句话叫什么来着“失败是通往成功的必经之路”,所以你会发现,当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“—>‘偶偶奇’。

非常显然仅仅要我的黑、蓝、白三个数目不相等就好。这样就非常easy理解为什么能被3整除就不行了,由于在3*3的格子中,黑蓝白三种颜色的数目始终是相等的。因此这样的方法就非常好地攻克了我们方法1中可能存在疑惑的地方。

所以就非常好理解了为什么N%3==0就能够,else 不行。


Code:

太简单了,就不贴了。

Summary:

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

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

  1. 【bzoj4868】[Shoi2017]期末考试 前缀和+暴力

    题目描述 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待 ...

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

    一.期末考试成绩班级前几名 胡晓波(90).杨彦婷(88).宋卓卿(85).唐指朝(84).陈建兵(83).宋沛颖(82).王昊越(81).白睿(80).韩沅伯(80).王艺楷(80).张漠林(80) ...

  3. 复旦大学2014--2015学年第二学期(14级)高等代数II期末考试第八大题解答

    八.(本题10分)  设 $A,B$ 为 $n$ 阶半正定实对称阵, 求证: $AB$ 可对角化. 分析  证明分成两个步骤: 第一步, 将 $A,B$ 中的某一个简化为合同标准形来考虑问题, 这是矩 ...

  4. 复旦大学2015--2016学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前几名 胡晓波(93).宋沛颖(92).张舒帆(91).姚人天(90).曾奕博(90).杨彦婷(90).白睿(88).唐指朝(87).谢灵尧(87).蔡雪(87) 二.总成绩计算方 ...

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

    一.期末考试成绩班级前几名 钱列(100).王华(92).李笑尘(92).金羽佳(91).李卓凡(91).包振航(91).董麒麟(90).张钧瑞(90).陆毕晨(90).刘杰(90).黄成晗(90). ...

  6. 复旦大学2014--2015学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前几名 金羽佳(92).包振航(91).陈品翰(91).孙浩然(90).李卓凡(85).张钧瑞(84).郭昱君(84).董麒麟(84).张诚纯(84).叶瑜(84) 二.总成绩计算 ...

  7. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  8. nyoj 757 期末考试【优先队列+贪心】

    期末考试 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没 交作业就会扣 ...

  9. 复旦大学2016--2017学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前十名 宁盛臻(100).朱民哲(92).徐钰伦(86).范凌虎(85).沈伊南(84).何陶然(84).丁知愚(83).焦思邈(83).董瀚泽(82).钱信(81) 二.总成绩计 ...

随机推荐

  1. maven下载的jar包可以查看源码

    1:Maven命令下载源码和javadocs 当在IDE中使用Maven时如果想要看引用的jar包中类的源码和javadoc需要通过maven命令下载这些源码,然后再进行引入,通过mvn命令能够容易的 ...

  2. 51nod 1413:权势二进制

    1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 一个十进制整数被叫做权势二进制,当他的十进制 ...

  3. OpenLayers学习笔记3——使用jQuery UI美化界面设计

    PC端软件在开发是有较多的界面库能够选择,比方DevExpress.BCG.DotNetBar等,能够非常方便快捷的开发出一些炫酷的界面,近期在学习OpenLayers.涉及到web前端开发,在设计界 ...

  4. HDOJ 4944 FSF’s game

    http://blog.csdn.net/keshuai19940722/article/details/38519681 不明真相的补一发... FSF's game Time Limit: 900 ...

  5. java 线程 生产者-消费者与队列,任务间使用管道进行输入、输出 解说演示样例 --thinking java4

    package org.rui.thread.block2; import java.io.BufferedReader; import java.io.IOException; import jav ...

  6. 数组进行多少次OP操作,才干有序

    1 题目描写叙述: 有一个数组:2,1,4,3.对于数组,有一种操作op(idx):将该index相应的数字移到首位.比方: op(3):  2 1 43 -> 3 2 1 4 op(1):   ...

  7. 2015.05.04,外语,读书笔记-《Word Power Made Easy》 14 “如何谈论日常现象” SESSION 41

    1. people are the craziest animals bovine(['bәuvain] adj. (似)牛的, 迟钝的),像牛一样placid(['plæsid] adj. 安静的, ...

  8. 0x31 质数

    poj2689 算根号R的质数,然后把L~R区间(这个很小啊)的合数判下 #include<cstdio> #include<iostream> #include<cst ...

  9. 洛谷p3803 FFT入门

    洛谷p3803 FFT入门 ps:花了我一天的时间弄懂fft的原理,感觉fft的折半很神奇! 大致谈一谈FFT的基本原理: 对于两个多项式的卷积,可以O(n^2)求出来(妥妥的暴力) 显然一个多项式可 ...

  10. EOJ 3124 单词表

    题目描述 提取英文文本中的单词,重复出现的单词只取一个,把它们按照字典顺序排序,建立为一个单词表. 例如:英文文本如下: “ask not what your country can do for y ...