考虑斐波那契数 \(fib_i\) 具有性质 \(fib_i=fib_{i-1}+fib_{i-2}\),又考虑到相邻块的构成字母不同,所以我们不难想到,对于目前剩余数最大的字母 \(x\) 来说,我们应该用 \(x\) 来形成现在最大的斐波那契数 \(fib_i\),否则非常明显的是,如果不这么干,必然 \(fib_i\) 将被拆成 \(fib_{i-1}+fib_{i-2}\),那么 \(x\) 将形成两个相邻块,所以我们每次贪心找到与上一个块构成字母不同的剩余数最大的字母来形成 \(fib_i\),如果无法形成大小为 \(fib_i\) 的块了,那么就不存在合法情况。

CODE

#include<bits/stdc++.h>
using namespace std;
#define int long long
priority_queue<pair<int,int> >q;
int t,k,f[65];
int check(int x){
int id=-1;
for(int i=2;i<=60;i++)if(f[i]-1==x){id=i-2;break;}
return id;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
f[0]=f[1]=1;
for(int i=2;i<=60;i++)f[i]=f[i-1]+f[i-2];
cin>>t;
while(t--){
while(!q.empty())q.pop();
cin>>k;
int sum=0;
for(int i=0;i<k;i++){int x;cin>>x;q.push({x,i});sum+=x;}
int st=check(sum);
if(st==-1){cout<<"NO\n";continue;}
int la=k;
bool flag=true;
for(int i=st;i>=0;i--){
pair<int,int> u=q.top();
q.pop();
if(u.first<f[i]){flag=false;cout<<"NO\n";break;}
if(u.second==la){
if(q.empty()){flag=false;cout<<"NO\n";break;}
pair<int,int> v=q.top();
q.pop();
if(v.first<f[i]){flag=false;cout<<"NO\n";break;}
la=v.second;
v.first-=f[i];
if(v.first)q.push(v);
q.push(u);
}
else{
u.first-=f[i];
la=u.second;
if(u.first) q.push(u);
}
}
if(flag)cout<<"YES\n";
}
return 0;
}

CF1718B Fibonacci Strings 题解的更多相关文章

  1. Codeforces 177G2 Fibonacci Strings KMP 矩阵

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF117G2.html 题目传送门 - CF177G2 题意 定义斐波那契字符串如下: $s_1="a ...

  2. CF1320 Div1 D.Reachable Strings 题解

    题目大意 给定一个长为\(n\)的01串\(S\),每次你可以对一个串的三个连续位置做:\(011 \rightarrow 110\),\(110 \rightarrow 011\)的操作. 有\(q ...

  3. CF1144A Diverse Strings 题解

    Content 我们定义一个字符串是合法的,当且仅当这个字符串是"连续排列"(按照字母表顺序排序).现在给出 \(n\) 个字符串 \(s_1,s_2,s_3,...,s_n\), ...

  4. 【做题】CF177G2. Fibonacci Strings——思维+数列

    题意:定义斐波那契字符串为: $f_1 = $ "a" \(f_2 =\) "b" \(f_n = f_{n-1} + f_{n-2}, \, n > 2 ...

  5. POJ2406:Power Strings——题解

    http://poj.org/problem?id=2406 就是给一个串,求其循环节的个数. 稍微想一下就知道,KMP中nxt数组记录了所有可与前面匹配的位置. 那么如果我们的循环节长度为k,有n个 ...

  6. 洛谷 UVA10298 Power Strings 题解

    Analysis 结论:设字符串长度为n,最长相同前后缀的长度为kmp[i],如n%(n-kmp[n])=0,则答案为n/(n-kmp[n]),否则为1. 如果循环节多于一个,以前n-kmp[n]个为 ...

  7. POJ2406 Power Strings 题解 KMP算法

    题目链接:http://poj.org/problem?id=2406 题目大意:给你一个字符串 \(t\) ,\(t\) 可以表示为另一个小字符串循环了 \(K\) 了,求最大的循环次数 \(K\) ...

  8. CF544A Set of Strings 题解

    Content 有一个长为 \(n\) 的字符串 \(q\),试问能否将其划分为 \(k\) 个子串,使得每个子串的首字母都不相等,可以的话输出 \(\texttt{YES}\) 并输出任意一个方案, ...

  9. CF447B DZY Loves Strings 题解

    Content 有一个长度为 \(n\) 的仅含小写字母的字符串 \(s\) 以及 26 个英文小写字母的价值 \(W_\texttt{a},W_\texttt{b},...,W_\texttt{z} ...

  10. CF1547B Alphabetical Strings 题解

    Content 我们有一个空的字符串,第 \(i\) 次操作我们可以将字母表中第 \(i\) 个字母加入字符串的最前面或最后面.我们称一个长度为 \(n\) 的字符串是合法的,当且仅当这个字符串可以通 ...

随机推荐

  1. DooTask开源项目管理工具,安装问题及解决!!!

    # 1.基本安装sudo apt update sudo apt install docker.io //通过宝塔的docker管理器安装?  //  wget -O install.sh https ...

  2. Go 多文件编程,包

    src/main.go(主函数所在的文件): package main // 主函数必须在main包中 // 多文件编程,可以通过命令行进行编译: go build main.go myfunc.go ...

  3. C#中内联函数的用法介绍

    函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还要将实参的值复制给形参,接下来还要将函数的返回地址(该地址指明了函数执行结束后,程序应该回到哪里继续执行)放入栈中,最后才跳转到函数内 ...

  4. 监控视频平台LiveNVR如何给摄像头视频添加文字水印和图片水印

    介绍 监控视频平台播放视频监控的时候,除了满足正常视频播放外,有时还需要方便标记或者防盗用等添加视频水印.有些视频在原始摄像头端就可以添加OSD水印,这种方式最好. 但是有些原始视频没有水印,但是平台 ...

  5. GB28181实现对安防摄像头的直播回放控制

    介绍 目前在安防行业中,GB28181协议越来越被重视,也越来越通用,越来越稳定.各个安防设备厂家已经基本都支持GB28181协议,通过GB28181协议可以实现获取设备的视频视频.录像数据.云台控制 ...

  6. 华擎、微星、华硕BIOS阵脚线序及杜邦线自制刷机线

    华擎.微星.华硕BIOS阵脚线序及杜邦现自制刷机线 起因及背景 博主注意到最近的一段时间八九代志强CPU进入了主流的垃圾佬视线内,且H310.Z270.B365等主板来到了100~180元的价位,配合 ...

  7. jdk1.6安装及下载

    jdk下载: wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.orac ...

  8. 【STM32系列】Error:Flash Download Failed-"Cortex-M3"解决方案之一

    前言 历时了一个多月的期末复习后,完全没有碰过板子和程序啊,结果就是m0的xds烧录器坏了,然后现在用ST-Link烧录f1的时候又遇到了:Error:Flash Download Failed-&q ...

  9. 【探究】C语言-类型转换问题

    25年9月团队招新,自己带了一些小家伙,帮助他们进行C语言的学习,同时对他们的疑惑进行解答. 其中,有一个小家伙的问题很有意思,是初学者不尝思考.老家伙(我)也不一定清晰知道的点,涉及到数据的储存和转 ...

  10. 3.AVL平衡树

    AVL平衡树 特征: AVL 树既是二叉搜索树,也是平衡二叉树,同时满足这两类二叉树的所有性质 AVL 树是一种平衡二叉搜索树 属性: 节点高度 节点平衡因子:节点左子树的高度减去右子树的高度,空节点 ...