题目

神题!!只有\(POI\)出得出来的神题!!

只能说好像懂了,不想听蒟蒻废话就右转\(dalao\)的博客

目前网上除官方外仅三篇题解,由于推论无法直观得出且有点复杂,难免不好理解,手玩数据最重要

做法

由于都是以\(H^x(0)\)开始,一下简写成\(H^x\)

性质:

\(~~~~~1.\)斐波那契堆:\(H^x=H^{x-1}+H^{x-2}\)(\(0\longrightarrow 1\longrightarrow 10\longrightarrow 101\longrightarrow 10110\))

\(~~~~~2.\)\(x\)为偶数时\(0\)结尾,为奇数时\(1\)结尾

\(~~~~~3.\)定义\(G^-1\)为\(H^1\)的逆操作,则\(s_1\)为\(s_2\)的子串时,逆操作也有此性质

\(~~~~~4.\)出现\(00\)一定不合法

\(~~~~~5.\)出现\(111\)时则一定不合法,把这个子串化成一般形式为\(10101+0\)

\(~~~~~6.\)\(x≥5\)且\(x\)为奇数时有后缀\(10101\),也就是说\(x≥5\)且\(x+1=0\)时一定不合法

神奇的推导:

\(~~~~~\)我们把所有的\(x\),写成序列\(\{a_1,a_2...a_{n-1},a_n\}\)的形式

\(~~~~~\)当\(\forall v\in \{a_1,a_2...a_{n-1},a_n\}>0\)时我们可以集体减\(1\)

\(~~~~~\)所以考虑\(0\)的特殊情况:

\(~~~~~\)前面为偶数一定不合法(性质\(2\)),考虑奇数:\((1:10\),合并转换为\(2)\);\((3:1010\),转换为两个\(2)\);

\(~~~~~\)剩下的都不合法了

特殊情况:

\(~~~~~\)由于性质\(4\)三子串的出现我们不好判断,而且两个\(1\)转换后不合法但是实际是合法的

\(~~~~~\)\(11\)出现在中间后面只能接\(0\),这种情况会合并的,\(11+x\)按之前的方法会判非法

\(~~~~~\)仅考虑在后面的情况,我们是可以直接去掉最后的\(1\)的,而\(111\)这种非法情况去掉后依然会判非法不用管了

\(~~~~~\)相似的,末尾\(3\)也会出现这种特殊情况改为\(2\)

My complete code

代码是\(copy\)来的

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 100100
using namespace std;
int n;
int a[M];
bool Solve(){
int i;
while(n>1){
if(!a[1]) a[1]=2;
if(a[n]==1) n--;
else if(a[n]==3) a[n]=2;
for(i=n;i;i--)
if(!a[i]){
if(a[i-1]==1)
a[i-1]=2,a[i]=-1;
else if(a[i-1]==3)
a[i-1]=2,a[i]=2;
else
return false;
}
int temp=0;
for(i=1;i<=n;i++)
if(a[i]!=-1)
a[++temp]=a[i];
n=temp;
for(i=1;i<=n;i++)
a[i]--;
}
return true;
}
int main(){
int T,i;
for(cin>>T;T;T--){
cin>>n;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
puts(Solve()?"TAK":"NIE");
}
return 0;
}

[POI2009]Slw的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. BZOJ 1115: [POI2009]石子游戏Kam

    1115: [POI2009]石子游戏Kam Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 883  Solved: 545[Submit][Stat ...

  3. BZOJ 1142: [POI2009]Tab

    1142: [POI2009]Tab Time Limit: 40 Sec  Memory Limit: 162 MBSubmit: 213  Solved: 80[Submit][Status][D ...

  4. 【BZOJ】【1115】【POI2009】石子游戏KAM

    博弈论 这个题……一看就觉得很捉急啊= =肿么办? 灵光一现:差分一下~ 那么我们看一下差分以后,从第 i 堆中拿走 k 个石子变成了:a[i]-=k; a[i+1]+=k; 嗯这就转化成了阶梯博弈! ...

  5. bzoj 1133: [POI2009]Kon dp

    1133: [POI2009]Kon Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 242  Solved: 81[Submit][Status][D ...

  6. bzoj 1138: [POI2009]Baj 最短回文路 dp优化

    1138: [POI2009]Baj 最短回文路 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 161  Solved: 48[Submit][Sta ...

  7. BZOJ1135: [POI2009]Lyz

    1135: [POI2009]Lyz Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 264  Solved: 106[Submit][Status] ...

  8. BZOJ1119: [POI2009]SLO

    1119: [POI2009]SLO Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 379  Solved: 181[Submit][Status] ...

  9. BZOJ1119[POI2009]SLO && BZOJ1697[Usaco2007 Feb]Cow Sorting牛排序

    Problem J: [POI2009]SLO Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 622  Solved: 302[Submit][Sta ...

随机推荐

  1. git忽略已经被提交的文件,以及如何恢复追踪

    问题描述 之前在提交代码时,.gitignore 没有填写完整,导致idea编辑器的配置文件夹.idea被提交了 然后每次运行本地项目,都会在.idea文件夹下生成一堆文件,这时发现问题,将.idea ...

  2. Servlet 国际化

    在我们开始之前,先来看看三个重要术语: 国际化(i18n):这意味着一个网站提供了不同版本的翻译成访问者的语言或国籍的内容. 本地化(l10n):这意味着向网站添加资源,以使其适应特定的地理或文化区域 ...

  3. 怎么获取Android应用程序的上下文

    在一个应用里面,有很多activity,而这些activity之间经常要进行互相启动.往复跳转.还有就是通过Notification启动.当activity多了之后,如果设置他的模式为单例模式,或者不 ...

  4. Win7机器上安装Ubuntu 14.0.4

    折腾了两天,分享一下经历. 我须要在已经安装了win7的机器上安装Ubuntu 14.0.4 (两者共存),研究下来有例如以下几种方案, 都折腾了一遍.分享一下经验: 方式1: wubi.exe, 把 ...

  5. ASP.NET动态网站制作(30)-- WEBService

    前言:继续讲正则表达式,然后介绍一下webservice. 内容: 1.匹配QQ号的正则表达式:^[1-9]\d{4,10}$:匹配手机号的正则表达式:^(0|86)?(13|14|15|18)[0- ...

  6. 编写自己的cp命令

    有时候要对整个目录做备份,修改cp1.c使得当两个参数都是目录时,把第一个目录中的所有文件复制到第二个目录中,文件名不变.那么该如何实现? 我们先来看看cp1.c的实现方式,它从一个文件中读取数据然后 ...

  7. 【BZOJ2064】分裂 状压DP

    [BZOJ2064]分裂 Description 背景:和久必分,分久必和...题目描述:中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力.同时经常搞OI的他把这个变成了一个 ...

  8. 学习编译并运行C代码

    以<UNIX网络编程>中的代码为例,学习如何编译并运行C代码. 根据 UNIX网络编程(第3版)环境搭建——使用MAC OSX10.10,能够成功运行 1.下载本书的头文件及示例源码原书地 ...

  9. junit5荟萃知识点(一):junit5的组成及安装

    1.什么是junit5? 和之前的junit版本不一样,junit5是由三个模块组成. JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage ...

  10. qt 如何给图元安装一个场景事件过滤器?

    void QGraphicsItem::installSceneEventFilter(QGraphicsItem *filterItem) class LabCrossEvent : public ...