UOJ 2016 [APIO 2016] Gap

2023-05-16

          • 传送门
          • 思路
          • 参考代码
          • 交互题
            • 交互题大致形式
            • Windows 平台下(Dev-C++)
            • Ubuntu 平台下

传送门
思路

  唉,我太弱了,什么都不会,题也做不来。这道题简直就是利用交互题的名字来降低难度的,但是我还是一点都不会做……

  对于子任务一,要求最多只能查询 n+12 n + 1 2 次。我们可以从两边向中间逼近,一次确定两个数,这样就能够在规定次数内确定所有的数。数都到手了还不会做?唉,我太弱啦!

  对于子任务二,计数器等于查询次数 + 查询到的数,注意计数器最多可以到 3n 3 n (没读题的我默认最多为 n n QAQ)。首先我们总得确定数的范围是吧,这会花费 n+1 次查询。对于中间的,我们把它分成 n2 n − 2 个块,然后分别查询。最后的答案就是块与块之间的最小值减去最大值(不要忘了一开始的最小值和最大值)。为什么呢?如果每一块中恰好有一个数,这显然正确,否则答案一定出现在跨过至少一个块的地方,这还是由一个最小值减去最大值得来的,不会是一个块内产生的答案。

参考代码
#include "gap.h"
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <cassert>
#include <cctype>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <bitset>
#include <list>
#include <functional>
typedef long long LL;
typedef unsigned long long ULL;
using std::cin;
using std::cout;
using std::endl;
typedef LL INT_PUT;
INT_PUT readIn()
{
    INT_PUT a = 0; bool positive = true;
    char ch = getchar();
    while (!(ch == '-' || std::isdigit(ch))) ch = getchar();
    if (ch == '-') { positive = false; ch = getchar(); }
    while (std::isdigit(ch)) { a = a * 10 - (ch - '0'); ch = getchar(); }
    return positive ? -a : a;
}
void printOut(INT_PUT x)
{
    char buffer[20]; int length = 0;
    if (x < 0) putchar('-'); else x = -x;
    do buffer[length++] = -(x % 10) + '0'; while (x /= 10);
    do putchar(buffer[--length]); while (length);
}

const int maxn = int(1e5) + 5;
int n;
long long a[maxn];

LL solve1()
{
    LL min = 0, max = LL(1e18);
    int cntL = 1, cntR = n;
    while (cntL <= cntR)
    {
        MinMax(min, max, a + cntL, a + cntR);
        min = a[cntL] + 1;
        max = a[cntR] - 1;
        cntL++;
        cntR--;
    }
    LL ans = 0;
    for (int i = 2; i <= n; i++)
        ans = std::max(ans, a[i] - a[i - 1]);
    return ans;
}

LL minVal[maxn], maxVal[maxn];

LL solve2()
{
    LL min = 0, max = LL(1e18);
    MinMax(min, max, &min, &max);
    if (n == 2) return max - min;
    LL step = (max - min - 1) / (n - 2);
    LL cnt = min + 1;
    for (int i = 1; i < n - 2; i++)
    {
        MinMax(cnt, cnt + step - 1, &minVal[i], &maxVal[i]);
        cnt += step;
    }
    MinMax(cnt, max - 1, &minVal[n - 2], &maxVal[n - 2]);

    LL ans = 0;
    cnt = min;
    for (int i = 1; i <= n - 2; i++)
    {
        if (minVal[i] == -1) continue;
        ans = std::max(ans, minVal[i] - cnt);
        cnt = maxVal[i];
    }
    ans = std::max(ans, max - cnt);
    return ans;
}

LL findGap(int type, int N)
{
    n = N;
    if (type == 1) return solve1();
    else return solve2();
}
交互题

  由于这是第一道交互题,这里总结下交互题怎么做。

交互题大致形式
Created with Raphaël 2.1.2 输入数据 输入数据 交互库 交互库 你的程序 你的程序 输入,就像传统题那样,只不过由交互库接手 进行交互 按题目要求进行交互并处理数据 进行交互 根据你的程序的运行结果按题目要求评分

  一般来说是这样哈,反正我也没做过什么交互题。

  在我的印象中,大部分题目都是交互库处理的输入,交互库才是老大,因此你的程序不需要写 main 函数,也不需要写输出函数,只需要按题目要求返回交互库的调用,或者告诉交互库你的需求或答案

  不过好像还有种交互题是利用输入输出进行交互的,不是很了解。感觉这种东西交互库没法写吧;像这道题交互库就很好实现……

Windows 平台下(Dev-C++)

  首先你要新建个文件夹……因为交互题需要的文件太多啦!

  一般来说(至少在 UOJ 上),会给你所谓的交互库,是一份源代码(以及头文件)。这也是为什么我觉得这种交互题要靠谱些,利用输入输出进行交互的怎么本题测试啊 QAQ。

  怎么编译呢?每次敲 G++ 太累了,可以写一个批处理文件,用的时候提前打开一个控制台就好啦!

@echo off
g++.exe gap.cpp grader.cpp -o gap.exe -static -DLOCAL -g3 -Wl,--stack=1073741824 2> compile.log
type compile.log
del compile.log

  首先,g++.exe 需要输入编译器全路径(如果你没有环境变量的话),这里为了节省空间就不写了。可以在 Dev-C++ 里面随便编译一个东西,看看编译日志,就知道全路径了。紧接着写两个要编译的源文件:gap.cppgrader.cpp,分别是最后要提交的东西和交互库。注意,gap.cpp 中需要包含交互库提供的 gap.h

  -o 编译指令表示输出的文件,这里我们就叫做 gap.exe 就好了(不要脑残打成 gap.cpp 了)。-static 可以不加,只是为了静态编译,如果运行出错可以试试,一般都不会。-DLOCAL 是自定义的宏,可以不加。-Wl,--stack=... 表示设置栈空间,如果题目说了开大栈空间就加上,否则最好不加,免得本地过交上去就 RE。最重要的一点是 -g3 编译选项,表示打开调试开关,打开了这个你才可以用 Dev-C++ 调试(使用 gdb 的犇犇?既然你都用 gdb 了那你还来看我这个干吗?)

  最后设置输出文件,2> 表示错误输出(stderr)。g++ 编译器的错误和警告信息均会输出到错误输出中。如果错误输出为空,说明编译成功;否则编译有错(由于没有打开警告的编译开关,因此并没有警告信息)。

  最后,我输出了编译错误信息并在硬盘中删除了它(为什么要删,我开心啊!)。如果编译成功,那就成功了。

  但是你想双击批处理程序来编译,结果就一闪而过了;加了个 pause 后,哪怕编译成功也会暂停,感觉很不爽,怎么办呢?这时需要手动判断一下结果。在编译成功时,g++ 的返回值为 0,否则为非零。然后我也不会了……不管了,将就用吧。

Ubuntu 平台下

  唉,我太弱了,连 Linux 都不会用。下面讲一下怎么用 NOI Linux。

  1. “批处理”
      Linux 下,没有 bat 一说,而是直接用一个没有后缀名的文本文件代替。
      方法:新建空白文件(右键),取名为 compile,无需后缀名。输入以下命令:
g++ gap.cpp grader.cpp -o gap -DLOCAL -g3 2> compile.log
cat compile.log
rm compile.log

  直接写 g++

  对比一下,与 Windows 相比有几个区别,但所幸区别不大:不用打 @echo off(用于关闭回显);不能指定栈空间(-WL,--stack=...);type 变成了 catdel 变成了 rm。那如何设置栈空间呢?(不设了,够用)

  1. 运行
      与 Windows 不同的是,不能直接输入文件名运行,必须要加上“当前目录”的标记。与 Windows 又不同,Linux 路径中的斜杠是正的:
./compile
./gap

  另外,compile 文件需要给它运行的权限。方法是点击右键,在属性里面改。

  这样就能编译并运行了。

  1. 使用 Guide 调试
      直接调试就好啦(虽然好像难用得****)!记住要打开 -g3 编译选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UOJ 2016 [APIO 2016] Gap 的相关文章

  • Windows Server 2016 DNS服务器的设置

    什么是DNS呢 xff1f DNS的全称是Domain Name System xff0c 在计算机网络中 xff0c 主机与主机之间的通信主要是通过IP地址进行通信的 xff0c 但是IP地址对于我们人类来说记忆难度比较大 xff0c 为
  • 【获奖公布】“我的2016”主题征文活动

    还记得2015的年末 xff0c 2016的新年伊始 xff0c 你给自己定下的目标 xff0c 对自己许下的诺言么 xff1f 时光荏苒 xff0c 一年又在指缝间溜走了 xff0c 离2016的结束还剩十多天 xff0c 在接下来的这十
  • flexnet licensing service下载_Abaqus 2016 软件下载地址及安装教程

    目前100000 43 人已关注加入龙跃系统 软件介绍 名称 xff1a Abaqus 2016 64位 大小 xff1a 5GB 语言 xff1a 简体中文 安装环境 xff1a Win7 Win8 Win10 ABAQUS 是一套功能强
  • so_rcvbuf linux,CVE-2016-9793 CVE-2016-9793 Linux Kernel 3.11 < 4.8 0 SO_SNDBUFFORCE SO_RCVBUFFORCE...

    CAP NET ADMIN gt root LPE exploit for CVE 2016 9793 No KASLR SMEP or SMAP bypass included Affected kernels 3 11 gt 4 8 T
  • Windows Server 2016 AD中新建组织单位、组、用户

    Windows Server 2016 AD中新建组织单位 组 用户 https blog 51cto com lumay0526 2046851 新建组织单位 新建组 新建用户 新建组织单位 组织单位简称OU xff0c OU是 xff0
  • 2016 CSDN最佳博客(Android)

    无意中在CSDN上看见了今年的十佳博客 xff0c 虽然现在还没有分出伯仲 xff0c 但是结果大概已知 xff0c 其中看了几篇文章 xff0c 感触挺深 xff0c 故把几大博客整理下来 xff0c 一方面方便广大博友 xff0c 另一
  • Windows server 2016 设置多用户登陆

    Windows server 2016 设置多用户登陆 需要在组策略进行设置 1 打组策略开始运行中输入tsconfig msc 2 计算机设置 管理模板 Windows组件 远程桌面服务 连接 限制连接数 启用并设置允许的DR最大数 3
  •     2016 年 高等工程数学 期末试题

    2016 年 高等工程数学 期末试题
  • Win10 LTSB 2016 激活

    以管理员权限打开 命令提示符 xff0c 输入一代码 一行一行复制 xff0c 回车 slmgr skms kms digiboy ir slmgr ato 转载于 https www cnblogs com kjcy8 p 1123701
  • Luogu 3647 [APIO 2014] 连珠线

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 又看错题了 题目中说一个新的珠子和一个已经添加的珠子连接起来 xff0c 我没有看到 xff0c 然后就凉了 立个 flag xff1a 已经连续看错五题了 xff0c
  • UOJ 2016 [APIO 2016] Gap

    传送门思路参考代码交互题 交互题大致形式Windows 平台下 xff08 Dev C 43 43 xff09 Ubuntu 平台下 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 题也做不来 这道题简直就是利用
  • APIO 2018 Practice Session T1 Wedding cake

    没有传送门题目大意思路参考代码熟悉环境 没有传送门 题目大意 给你一个长度为 n n 的正整数序列 a i ai xff0c 要求构造出 n n 个小数 使得它们的和为 1 1 xff0c 且每个数小数点后恰好有
  • 记录生活,记录学习----我的2016

    过着2017年的日子 xff0c 思考着2016年人生的变化 xff0c 或许 xff0c 最大的变化是懂得记录学习 xff0c 记录生活吧 2016年 xff0c 博客进入了我的生活 xff0c 从年初的寥寥数篇博客 xff0c 到现在C
  • 随着稻香河流继续奔跑 ——致2016

    写在前面 xff0c 2016于我而言 xff0c 是丰收的一年 这一年 xff0c 我收获了能力与本领 xff0c 收获了美丽与自信 xff0c 收获了欣赏和肯定 2017 xff0c 我会不忘来时路 xff0c 继续前行 2016的驿站
  • 2016 CSDN最佳博客(Android)

    无意中在CSDN上看见了今年的十佳博客 xff0c 虽然现在还没有分出伯仲 xff0c 但是结果大概已知 xff0c 其中看了几篇文章 xff0c 感触挺深 xff0c 故把几大博客整理下来 xff0c 一方面方便广大博友 xff0c 另一
  • 【获奖公布】“我的2016”主题征文活动

    还记得2015的年末 xff0c 2016的新年伊始 xff0c 你给自己定下的目标 xff0c 对自己许下的诺言么 xff1f 时光荏苒 xff0c 一年又在指缝间溜走了 xff0c 离2016的结束还剩十多天 xff0c 在接下来的这十
  • 安装Windows Server 2016 服务器 标准版

    注意事项 xff1a 安装带桌面版的 管理员密码设置 xff0c 要 注意大小写加数字 xff0c 不然会设置失败 安装文件下载 xff1a MSDN 我告诉你 PE U盘 微PE 服务器的驱动 xff0c 可以自己到对应服务器厂家的官网上
  • 华为机试题(一) 最高分是多少

    老师想知道从某某同学当中 分数最高的是多少 现在请你编程模拟老师的询问 当然 老师有时候需要更新某位同学的成绩 输入描述 输入包括多组测试数据 每组输入第一行是两个正整数N和M 0 lt N lt 30000 0 lt M lt 5000
  • 【系统篇 / 安装】❀ 01. 安装镜像 ISO 文件下载 ❀ Windows Server 2016

    简介 2016年10月13日 微软正式发布Windows Server 2016和System Center 2016 全球可用 用户可以到MSDN VLSC 批量授权服务中心 获取下载 服务器2016走的路线和以前一样 新的Windows
  • 2016 OWASP Mobile TOP 10 中文版

    M1 平台使用不当 这个类别包括平台功能的滥用 或未能使用平台的安全控制 它可能包括 Android 的意图 intent 平台权限 TouchID 的误用 密钥链 KeyChain 或是移动操作系统中的其他一些安全控制 有几种方式使移动应

随机推荐

  • 编译原理习题两则(龙书,写出语言的正则定义)

    3 3 5 3 注释 xff0c 即 和 之间的串 xff0c 且串中没有不在双引号 xff08 34 xff09 中的 注 xff1a 假设双引号是匹配的 思路 xff1a 从空串开始写 xff0c 写出整体框架后 xff0c 通过分类讨
  • 2023 New Year‘s Resolution

    This Is Game 2023 New Year 39 s Resolution My 2022 ended with a day of game I am convinced that I am not to blame becaus
  • 补录:2018 和 2019 New Year‘s Resolution

    前言 xff1a 吉光片羽 xff0c 以飨读者 2018 New Year 39 s Resolution One year and a half ago I felt that life in 2020 would be quite d
  • 原博文地址

    由于账号问题 xff0c 现更改为这个账号 xff0c 以下为原博文地址 使用WH MOUSE LL钩子来判断按键是否是mouse event模拟的 http blog csdn net qq 26140973 article detail
  • [NOI 2003] 文本编辑器 Splay 维护序列 / 块状链表

    传送门 xff08 JZOJ xff09 xff08 第一道全国决赛题 xff09 解法 1 xff1a 使用 Splay 维护 不管怎么说 xff0c 总和刚刚学过的迎合上了 这道题可以直接上 Splay 维护线性序列 xff0c 光标位
  • 一次macOS的升级填坑(macOS Catalina - macOS Monterey)

    目录 小序一 升级前操作二 升级中三 问题填坑1 像我一样长时间卡在一个进度条怎么办2 在更新途中重启过电脑 xff08 完整流程填坑 xff09 3 安装之后不能开机 xff0c 如何紧急拷贝资料4 安装不成功 xff0c 如何重新安装系
  • CF 713C Sonya and Problem Wihtout a Legend

    文章目录 传送门题目大意正解通过维护关键点来维护信息参考代码 传送门 题目大意 给定一个长度为 n n 3000
  • Luogu 3642 [APIO 2016] 烟火表演

    传送门引例 xff08 上一道题 xff09 凸函数一开始的思路正解参考代码总结 传送门 引例 xff08 上一道题 xff09 凸函数 回忆我们上一道题是怎么做的 我们维护的东西的实质是一个 xff08 下 xff09 凸函数 由于我们的
  • Luogu 3631 [APIO 2011] 方格染色

    传送门思路参考代码细节 传送门 思路 很不错的一道题 xff0c 用到的东西不深 xff0c 但是要想到确实需要一定思维 一开始我想的是动态规划 xff0c 发现如果要设状态需要知道一个格子左边 xff0c 上边和左上边三个格子的状态 然后
  • Luogu 3632 [APIO 2011] 寻路

    传送门正解参考代码 传送门 正解 暴力连边跑最短路就好了 xff0c 只不过代码太长太难写啦 xff01 参考代码 span class hljs preprocessor include lt cstdio gt span span cl
  • Luogu 3634 [APIO 2012] 守卫

    传送门思路正解参考代码 传送门 思路 感觉自己越来越笨了 首先 xff0c 很明显这道题需要把没有看到忍者的区间给删去 xff0c 可以用前缀和 O n O n 处理 xff0c 然后对没有删去的地方重新标号 重新标号时 xff0c 需要对
  • Luogu 1552 [APIO 2012] 派遣

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 题读错了两次 xff0c 一开始读成了一个一般的背包 xff0c 然后读成了一个价值和花费相同的背包 xff0c 最后才发现原来是一个价值为 1
  • 贪玩 CF 之旅

    文章目录 CF 7D Palindrome Degree http codeforces com problemset problem 7 D 题解 CF 713C Sonya and Problem Wihtout a Legend ht
  • Luogu 3638 [APIO 2013] 机器人

    传送门思路正解参考代码关于 SPFA 传送门 思路 n n 这么小 会不会是搜索题 稍有经验的我直接否定了这个结论 仔细读题并分析样例 发现原来一个位置可以有多个机器人 且机器人行走的时候无视其它机器人 那这个就是一张图啊 可以将这张图预处
  • Luogu 3647 [APIO 2014] 连珠线

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 又看错题了 题目中说一个新的珠子和一个已经添加的珠子连接起来 xff0c 我没有看到 xff0c 然后就凉了 立个 flag xff1a 已经连续看错五题了 xff0c
  • 【转】mingw64的安装方法

    转自 xff1a http write blog csdn net postlist mingw64的安装方法 1 下载ming w64 http sourceforge net projects mingw w64 files or x8
  • Luogu 3645 [APIO 2015] 雅加达的摩天楼

    传送门思路正解参考代码Update 传送门 思路 唉 xff0c 我太弱了 xff0c 我都看出来要分块了 xff0c 就是做不来 不过终于把题读对了 先来看子任务三怎么做 显然可以有一个 O m 2 O m 2
  • Luogu 3644 [APIO 2015] 八邻旁之桥

    传送门思路当 k 61 2 时参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 题也做不来 很明显这道题先要把不过河的人排除了 xff0c 剩下的都是要过河的 当 k 61 1 k 61 1 时 xff0
  • Luogu 3646 [APIO 2015] 巴厘岛的雕塑

    传送门总结 APIO 2015思路参考代码总结 传送门 总结 APIO 2015 争取今天做完一套 QAQ T1 我最多之能想到从高位向低位做 xff0c 然后就完全不会了 xff1b T2 我想到了分情况讨论 xff0c 但是没有建图成功
  • UOJ 2016 [APIO 2016] Gap

    传送门思路参考代码交互题 交互题大致形式Windows 平台下 xff08 Dev C 43 43 xff09 Ubuntu 平台下 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 题也做不来 这道题简直就是利用