题目描述

组合子逻辑是 Moses Schönfinkel 和 Haskell Curry 发明的一种符号系统,用于消除数理逻辑中对于变量的需要。本题考察一种与真实世界的组合子演算略有差别的组合子系统。

一个组合子项是下列形式之一:

PP

(E_1\;E_2)(E1​E2​)

其中 PP 表示一个基本函数,E_1E1​以及E_2E2​表示一个组合子项(可以相同)。不满足以上形式表达式均非组合子项。

我们将一个组合子项 EE 的参数个数 np(E)np(E)如下:

np(P)np(P) = 基本函数 PP 的参数个数;

np((E_1\;E_2)) = np(E_1) - 1np((E1​E2​))=np(E1​)−1。

本题中,我们用一个正整数同时表示一个基本函数,以及该基本函数的参数个数。

对于一个组合子项 EE,如果它和它包含的所有组合子项的参数个数 npnp 均为正整数,那么我们称这个 EE 为范式。

我们经常组合子项简化表示:如果一个组合子项EE含有连续子序列(… ((E_1\;E_2)\;E_3) …E_n)(…((E1​E2​)E3​)…En​) (其中 n ≥ 3n≥3),其中E_kEk​表示组合子项(可以是简化表示的),那么将该部分替换为(E_1\;E_2\;E_3 … E_n)(E1​E2​E3​…En​),其他部分不变,得到表达式 EE 的一个简化表示。一个组合子项可以被简化表示多次。

给定一个基本函数序列,问至少需要添加多少对括号,才能使得该表达式成为一个范式的简化表示(即满足范式的性质);如果无论如何怎样添加括号,均不能得到范式的简化表示,输出-1−1。

题解

  • 题面真的害死人
  • k 表示当前的最大值还能再包含多少位,当前的最大值不一定要包含当前位,只要求出正确结果即可

代码

 1 #include <queue>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 using namespace std;
 6 int T,n,a[2000010];
 7 priority_queue<int> Q;
 8 int main()
 9 {
10     for (scanf("%d",&T);T;T--)
11     {
12         scanf("%d",&n);
13         for (int i=1;i<=n;i++) scanf("%d",&a[i]);
14         if (n==1) { puts(a[1]?"0":"-1"); continue; }
15         int k=a[1]-1,ans=1;
16         while (!Q.empty()) Q.pop();
17         for (int i=2;i<=n;i++)
18         {
19             if (k) k--;
20             else
21             {
22                 if (Q.empty()||Q.top()<2) { ans=-1; break; }
23                 ans++,k=Q.top()-2,Q.pop();
24             }
25             Q.push(a[i]);
26         }
27         printf("%d\n",ans);
28     }
29 }

转载于:https://www.cnblogs.com/Comfortable/p/11280301.html

[优先队列][堆] Luogu P4505 组合子逻辑相关推荐

  1. 【BZOJ3152】组合子逻辑,贪心+堆

    3152: [Ctsc2013]组合子逻辑 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 176 Solved: 107 [Submit][Statu ...

  2. 【逻辑与计算理论】λ演算、组合子逻辑的历史背景

    [逻辑与计算理论]λ 演算.组合子逻辑的历史背景 函数--是横跨数学.逻辑和计算的最基础概念,也是从逻辑走向计算的基本工具.想象一下,如果一个逻辑系统不再以命题.谓词.量词.变量为基本单位而把函数作为 ...

  3. 【逻辑与计算理论】λ演算与组合子逻辑概念简介

    [逻辑与计算理论]λ演算与组合子逻辑概念简介 一.λ演算基本概念入门 1. 通过我们前面的讨论可知:有两种函数,一种是一阶谓词逻辑中存在着的特殊函数--真值函数:另一类则是我们所熟悉的数学函数.通过学 ...

  4. 【逻辑与计算理论】组合子逻辑与 Y 组合子

    为什么是Y? 在前面的几个帖子里,我已经建立了如何把lambda演算变成一个有用的系统的点点滴滴. 我们已经有了数字,布尔值和选择运算符.我们唯一欠缺的是重复. 这个有点棘手.lambda演算使用递归 ...

  5. [算法系列]优先队列,堆与堆排序

    优先队列,堆与堆排序 1 优先队列 有时我们在处理有序元素时,并不一定要求他们全部有序. 很多情况下我们会收集一些元素, 处理当前最大的元素, 然后再收集更多元素, 再处理当前最大元素 - 这种情况下 ...

  6. 函数式编程中的组合子

    函数式编程是一个比较大的话题,里面的知识体系非常的丰富,在这里我并不想讲的特别的详细.为了应对实际中的应用,我们讲一下函数式编程中最为实用的应用方式--组合子.组合子本身是一种高阶函数,他的特点就是将 ...

  7. c语言将数组的列项向左移动,【数据结构与算法分析——C语言描述】第六章:优先队列(堆)...

    第六章:优先队列(堆) [TOC] 思考如下场景,老师布置了很多作业,现在你需要将作业打印出来,你将作业文件依照队列的形式放入待打印列表中,但此时,你希望最重要(或者是马上就要上交)的作业优先打印出来 ...

  8. 关于python中Y组合子的问题讨论

    关于python中Y组合子的问题讨论 by Wenze Jin 在 The Structure and Interpretation of Computer Programs 这门课的hw03-Rec ...

  9. 【BHOJ 女娲加农炮 |、||】贪心 | 优先队列 | 堆 | E

    这次我们通过两道例题来总结一下优先队列的用法和实现: 目录: [BHOJ 1512]女娲加农炮 [BHOJ 1517]女娲加农炮II [BHOJ 1512]女娲加农炮 核心:贪心 + 优先队列 URL ...

最新文章

  1. AI玩起音乐来“天赋”惊人,新版加州旅馆听过没?还是熟悉的老鹰乐队嗓音...
  2. 成轴对称的两组图片能被分成两类吗?
  3. Redis之字典(hashtable)
  4. linux sshd启动失败 sshd re-exec requires execution with an absolute path
  5. 微型计算机原理上机实验改错,北京理工大学微机原理汇编语言上机实验题
  6. 为什么c语言读文件少内容,这个程序为什么在读文件时候读不全数据?
  7. Java学习笔记-1.简介
  8. 不能bostype没有元数据异常_手把手教你用Python画个箱形图,找出“脏数据”
  9. CMake快速入门教程-实战
  10. JDBC系列 之 存储过程
  11. CentOS 6.6安装配置LAMP服务器(Apache+PHP5+MySQL)
  12. VCL界面开发工具!DevExpress VCL v19.2.5全新出发
  13. 网站服务器在什么地方怎么查,如何查询一个网站所在服务器信息
  14. 个人中心页面的UI设计知识点
  15. 全景图下载——chrome插件Pano fetch
  16. python调用包的路径_Python3 模块、包调用路径详解
  17. CSAPP实验1:datalab
  18. 第一本人工智能教材入驻高中课堂,程序员们要加油了
  19. 山西大同大学计算机专业学校,山西大同大学计算机历年考试.doc
  20. GB 18030介绍及其与相关标准的比较-GB 18030的优点

热门文章

  1. Matlab中求数据概率分布的方法
  2. git pull提示当前branch没有跟踪信息
  3. CSS之Screen视图属性
  4. Webpack基础之插件
  5. selenium定位元素的方法_selenium定位元素之冻结窗口
  6. RFC函数的初步使用-同步
  7. DSO windowed optimization 代码 (3)
  8. solr 配置中文分词器
  9. 设置MySQL自动增长从某个指定的数开始
  10. html5图片长按保存,一文彻底解决HTML5页面中长按保存图片功能