NEERC 17 I Interactive Sort (交互题)

交互题 codeforces C. Bear and Prime 100 To flush you can use (just after printing an integer and end-of-line): fflush(stdout) in C++; System.out.flush() in Java; stdout.flush() in Python; flush(output) in Pascal; 阅读详情

题意:

       给出1到n这n个数的任意一个排列,然后奇数按顺序分到o数组,偶数按顺序分到e数组,你每次可以询问e数组中第i个和o数组中第j个的大小情况,查询结束后输出结果,查询次数最多30 000次,n≥1000n≥1000

思路:

       我们先想,如果e是有序的,那么我们就可以枚举奇数组中每个数字,然后每次都二分,次数为O(nlogn)O(nlogn)。但是此时e是无序的,所以我们要想办法让e变得有序来减少询问次数。
        我们先用o数组中的数xx,和e数组中每个数字比较关系,查询n/2次,会发现,我们不仅确定了这个数字的大小,也将e数组切成了两块(一块里面的数字都比x小,一块里面数字都比x大,块内数字无序)。
        按照这个方法接着向下做,我们会发现,对于每个奇数,我们能利用这个奇数把某一个偶数块切成两块,这样我们最后会把偶数切成n/2块,也就确定了每个偶数的大小。这样我们就能O(n2)O(n2)枚举得到结果。
       可是询问次数不允许,我们不能O(n2)O(n2)枚举。我们发现偶数块其实也是具有一定的单调性的(虽然内部无序),我们可以用偶数块中某一个数字代表这个块,每次奇数查询的时候利用这个数字进行二分,二分就可以找到第一个代表值大于当前奇数的偶数块,这块以及前面一块都是有可能的(因为块内部是无序的),然后遍历两个块才能判断出到底需要的是哪一块。
       这种做法最差情况下询问次数是O(n2)O(n2)的,但是题目保证数据是随机的,所以可以当作是O(nlogn)O(nlogn)的,而且因为n才1000,时间却有10秒,所以怎么随意暴力都是可以的

错误及反思:

       边界处理需要特判

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 11000;
int ans1[N],ans2[N],n,tot=1;
vector<int> v[N];

int change(int p,int x){
    int ans=0;

    for(int i=1;i<p;i++)
        ans+=v[i].size();

    vector<int> vv[2];

    for(int i=0;i<v[p].size();i++){
        printf("? %d %d\n",v[p][i],x);
        fflush(stdout);
        char t[10]; scanf("%s",t);
        if(t[0]=='<'){
            ans++;
            vv[0].push_back(v[p][i]);
        }
        else vv[1].push_back(v[p][i]);
    }

    if(vv[0].size()&&vv[1].size()){
        tot++;
        for(int i=tot;i>p;i--) v[i]=v[i-1];
        v[p]=vv[0];
        v[p+1]=vv[1];
    }
    else if(vv[1].size()==0){
        return n%2?n:n-1;
    }
    else if(p==1){
        return 1;
    }
    else{
        p--;

        ans=0;
        vv[0].clear(); vv[1].clear();
        for(int i=1;i<p;i++)
            ans+=v[i].size();

        for(int i=0;i<v[p].size();i++){
            printf("? %d %d\n",v[p][i],x);
            fflush(stdout);
            char t[10]; scanf("%s",t);
            if(t[0]=='<'){
                ans++;
                vv[0].push_back(v[p][i]);
            }
            else vv[1].push_back(v[p][i]);
        }

        tot++;
        for(int i=tot;i>p;i--) v[i]=v[i-1];
        v[p]=vv[0];
        v[p+1]=vv[1];
    }
    return ans*2+1;
}

int main(){
    scanf("%d",&n);
    if(n==1){
        puts("! 1\n");
        fflush(stdout);
        return 0;
    }
    if(n==2){
        puts("! 2 1\n");
        fflush(stdout);
        return 0;
    }
    for(int i=1;i<=n/2;i++) v[1].push_back(i);

    for(int i=1;i<=(n+1)/2;i++)
    {
        int l=0,r=tot;
        while(l+1<r){
            int m=(l+r)/2;
            printf("? %d %d\n",v[m][0],i);
            fflush(stdout);
            char t[10]; scanf("%s",t);
            if(t[0]=='<') l=m;
            else r=m;
        }
        ans1[i]=change(r,i);
    }
    for(int i=1;i<=n/2;i++)
        ans2[v[i][0]]=i*2;
    printf("!");
    for(int i=1;i<=n/2;i++) printf(" %d",ans2[i]);
    for(int i=1;i<=(n+1)/2;i++) printf(" %d",ans1[i]);
    puts("");
    fflush(stdout);
}
别再踩坑了!QT5.15.2配置Android开发环境保姆级避坑指南(含Java8、SDK Tools版本选择) 本文提供QT5.15.2配置Android开发环境的详细避坑指南,重点解决版本锁定、SDK工具选择和QtCreator配置等常见问题。通过实测推荐的Java8、Android SDK Tools版本及NDK配置,帮助开发者高效完成环境搭建,避免隐性冲突和配置失败。 阅读详情

相关推荐

Minitab实战:用Weibull分布预测产品寿命的5个关键参数(附真实案例)

本文通过一个真实的电容器老化测试案例,详细介绍了如何运用Minitab软件进行Weibull分布分析,以预测产品寿命。文章深入解读了形状参数β、尺度参数η等五个关键参数的工程意义与商业价值,指导工程师从失效数据中提取洞察,并将其应用于可靠性评估、保修策略制定及成本预估等实际业务决策。

weixin_29231263的博客 523

(交互题)Searching Local Minimum

题: This is an interactive problem. Homer likes arrays a lot and he wants to play a game with you. Homer has hidden from you a permutation a1,a2,…,an of integers 1 to n. You are asked to find any index k (1≤k≤n) which is a local minimum. For an array a1,a2,

qq_52317884的博客 554

电化学阻抗谱(EIS)在锂离子电池中的应用

摘要电化学阻抗谱(electrochemical impedance spectroscopy, EIS)是一种重要的电化学测试方法,在锂离子电池动力学反应机理研究及动力学参数测量等方面具有广泛的应用。在锂离子电池运行过程中,各反应步骤的动力学参数及时间常数不同,而EIS可以在较宽的频率范围内对体系施加小幅正弦激励信号,使得在特定频率下突出特定时间常数的电极过程,从而将复杂的电极过程分离,实现单一电极过程动力学的分析。通过对交流阻抗信息的研究,也可以为锂离子电池及其他电池的应用与管理、电化学过程设计及电极材

qiushireader的博客 2652

NEERC 17 Problem I. Interactive Sort

NEERC 17 Problem I. Interactive Sort Solution 当写了两倍正解的代码使用了两倍于正解的操作步数…… 刚开始的想法是求出一个bbb,再求出一个aaa,依次轮换,分别维护当前知道确定值的a,ba,ba,b的有序序列,然后求aaa就在bbb的有序序列里二分,确定大致范围,再暴力求出当前数的大小并更新bbb中每个数的上下界,求bbb同理。 这样操作次数应该是O(nlgn)O(nlgn)O(nlgn)的,然而常数太大了……,需要接近40W40W40W次操作。 而正解则是上一

xmr_pursue_dreams的博客 267

基于STM32的可穿戴式多生理参数实时监测与预警系统

针对传统可穿戴健康设备存在的生理参数监测种类单一、数据处理依赖云端导致响应滞后、续航能力弱等问题,设计一种基于STM32的可穿戴式多生理参数实时监测与预警系统。系统以STM32L476RG低功耗微控制器为核心,集成心率血氧传感器、体温传感器、血压传感器,实现人体心率、血氧饱和度、体温、收缩压/舒张压的同步采集;通过边缘端轻量化数据处理算法完成参数异常判定,结合低功耗硬件设计与软件休眠策略,在保证监测精度的同时延长续航。测试结果表明,系统心率监测误差≤2次/分钟,血氧饱和度误差≤2%,体温误差≤±0.2℃,血

m0_74026776的博客 2041

Windows 10/11 注册表 ProfileImagePath 误改修复:3步恢复用户登录与数据安全

本文详细介绍了Windows 10/11系统中因误改注册表ProfileImagePath键值导致用户无法登录的修复方法。通过3个关键步骤,包括定位SID、安全修复注册表项及验证处理,帮助用户恢复登录并保障数据安全。特别强调了操作顺序的重要性以避免数据丢失,适用于各类Windows用户账户登录错误的紧急处理。

chuoshao2508的博客 403

交互题入门

纪念一下第一次A掉交互题。 インタラクティブ練習 (Interactive Sorting) B - インタラクティブ練習 (Interactive Sorting) Time Limit: 2 sec / Memory Limit: 256 MB Score : 300 points Problem Statement This is an interactive task. ...

yali_hzy的博客 2865

【YOLOv11多模态融合改进】(可见光+红外)涉及像素级融合、特征级融合(中期、中后期、后期)、决策级融合的完整配置步骤以及二次改进方案

在网络输入阶段将多模态数据直接合并,形成统一的特征表示。

Limiiiing的博客 1968

Atcoder练习场インタラクティブ練習 (Interactive Sorting)

题目链接 第一个点        冒泡排序解决 第二个点        插入排序+二分优化+预处理球之间关系 第三个点        思维???        不太好讲,模拟一下比较好想,        构造一个s[0]&lt;s[1]&lt;s[3]&lt;s[4],然后对于s[2](构造过程中保证了s[2]小于s[4]),插入合适的位置        容易看出四个位置,两次判...

这里RevolIA,_(:з」∠)_ 1514

基于Simulink的电机驱动逆变器仿真

本文完成了电机驱动逆变器的Simulink多层级仿真平台搭建,实现了:✅ 构建了从理想到器件级的逆变器模型体系✅ 实现了Si/SiC损耗精确计算与结温预测✅ 建模了母线寄生参数、死区效应、栅极驱动等关键非理想特性✅ 支持故障注入与保护策略验证✅ 集成了热管理、EMI、寿命预测与碳足迹评估。

amy_mhd的博客 87

【Bug已解决】Codex CLI 运行时出现 command not found: codex 解决方案

方案适用场景推荐指数修复 PATH 配置最常见的基础排查方向⭐⭐⭐⭐⭐检查原生二进制完整性PATH 正常但执行仍然异常⭐⭐⭐⭐统一包管理器混用多种包管理器导致混乱⭐⭐⭐⭐确认安装脚本未被跳过CI/CD 或企业策略环境⭐⭐⭐⭐排查网络下载渠道企业内网/受限网络环境⭐⭐⭐需要留意 warning 中是否涉及脚本执行失败、网络超时重试等信息,这类 warning 往往是后续问题的前兆,建议出现明显的下载/网络相关警告时就主动重新安装一次确认。Codex CLI 报。

一键难忘的博客 1万+

AtCoder Tasks B インタラクティブ練習 (Interactive Sorting)

优化插入法解决交互排序问题

m0_37711725的博客 3420

TriCore架构-基于TC397在SOTA过程中AB-SWAP切换底层原理

TC397的SOTA升级机制通过硬件地址重映射实现,利用MMU将逻辑地址动态映射到不同物理地址。其PFlash支持标准/备用地址映射,通常使用PF0+PF1+PF4空间以便于OTA处理。升级时,新固件自动写入非活动分区(A/B分区切换),由地址转换函数完成逻辑地址到物理地址的转换。系统重启后根据寄存器选择启动区域,实现安全无缝的固件更新。

xiandang8023的博客 490

赛肯德 | 2017NEERC某题

我们枚举每一条边的流量x,将它作为底流(也就是比它大的的流量变成差值,比它小的流量为0),然后我们设x就是路径上第K大的那个边的流量。然后跑最短路,加上dis[n]就是当前的答案。然后取min即可。 算法时间复杂度\(O(n^2logn)\) 为什么这样子就是最小的呢?????我也很懵逼啊 因为你考虑ans_x是第K大的流量,设当前处理的为x。 如果按照上述规定来跑最短路,显然上述所...

weixin_30468137的博客 171

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Full_of_Boys训练1总结

题目来源:2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) A. Archery Tournament 每次查询,找这个位置前面的15个圆,后边15个圆来更新答案。set维护一下圆就行。为什么对,官方题解:可以证明经过某一条竖线的圆不超过logC个(C=1e9) ...

weixin_30243533的博客 120

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

非传统题初探——AtCoder Practice Contest #B - インタラクティブ練習 (Interactive Sorting)...

原题: Time limit: 2sec /Memory limit: 256MB Score :300points Problem Statement This is an interactive task. There areNballs labeled with the firstNuppercase letters. The balls hav...

dav74739的博客 673

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

2017 NEERC

2017 NEERC Problem A. Archery Tournament 题目描述:在二维平面上,会陆续出现一些圆,以及一些询问,询问点是否在圆内,如果是,则输出那个圆,并把那个圆删掉,否则输出\(-1\)。注意:这些圆均与\(x\)轴相切,并且这些圆不会相交。 solution 因为这些圆都与\(x\)轴相切,所以经过直线\(x=x'\)的圆不会超过\(log\)个。所以只要找...

diebenger6280的博客 326

2017-2018 ACM-ICPC, NEERC解题报告

A. Union of Doubly Linked Lists   模拟链表的合并,注意收尾相接的问题,不少队都A了 B. Preparing for Merge Sort   动态规划,优化才能水过,否则会无情TLE C. Sum of Nestings   dfs递归搜索,字符串操作 D. Dog Show   贪心&&模拟 E. Packmen   二

Welcome to yjjr's blog! 3489

NEERC2017:L - Laminar Family

传送门 很容易想到,离线按路径长度从大到小排个序,用树链剖分加颗支持区间cover的线段树就好了 代码: #include<cstdio> #include<iostream> #include<algorithm> using namespace std; void read(int &x){ char ch; bool ok; for...

weixin_30485799的博客 304

特殊排序(二分+交互题)

题意:有N个元素,编号1.2…N,每一对元素之间的大小关系是确定的,关系不具有传递性。 也就是说,元素的大小关系是N个点与N*(N-1)/2条有向边构成的任意有向图。然而,这是一道交互式试题,这些关系不能一次性得知,你必须通过不超过10000次提问来获取信息,每次提问只能了解某两个元素之间的关系。现在请你把这N个元素排成一行,使得每个元素都小于右边与它相邻的元素。你可以通过我们预设的bool函数c...

肘子的博客 380

Interactive Problems(交互式问题) 2016.6.9

1、CodeForces_101021A Guess the Number #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned

追风蹑影 1616

(交互题)CF1282D. Enchanted Artifact

CF1282D. Enchanted Artifact 题意&思路: 一个只包含a,b的字符串长度n不超过300,删除,添加,改变字符都算一次操作。现在有一个字符串s,你去猜。你每次输给测评姬一个字符串,测评姬返回给你需要多少次操作可以得到s。你有n+2次机会(你不知道n是多少)。 第一次做交互题,格式都不知道怎么写,QAQ。 一开始看到2300难度的题目,我是拒绝的。 一开始想由于不知道...

Z7784562的博客 1052

数字序列问题

解题思路: 这个序列的结构如上图所示,很明显求解第k个数字是什么需要分两步走,第一步求解所在的行,第二部求解所在的列即该行中的什么位置。首先看怎么求解第k个数字所在的行,我们发现当某一行的最后一个数的位数为w时,这一行的数字个数与相邻行的数字个数的差为w,即局部范围内成等差数列(具有相同位数的最后一个数的行)。我们就按照每行的最后一个数的位数来划分所有的这些行使得它们组成一个个的等差数列。根据等...

Tony Yang的博客 953

2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) A

传送门 训练时候没有考虑到这样一个性质,得到栗子大佬的点拨才看出来:打到的圆一定是左边或右边第一个直径高出射击高度的圆。 如上图,如果点A不落在圆C内却落在圆D内,显然线段AB在圆D内且线段AB与圆C相交,则圆D与圆C相交,不符合题意描述。 再用线段树维护一下即可。#include <bits/stdc++.h> using namespace std; const int maxn=20

ACM, deep love 900

【交互】CF1081F Tricky Interactor

【题目】 原题地址 有一个长度为nnn的010101串,初始告诉你串中111的个数,你可以进行不超过10410^4104次操作,每次操作形如(l,r)(l,r)(l,r),将会随机使区间[1,r][1,r][1,r]或[l,n][l,n][l,n]其中一段全部取反,并返回现在串中111的个数,求原串。n≤300n\leq 300n≤300 【解题思路】 首先我们知道一个结论:翻转一个区间,则这个全...

MEET YOU FIRST TIME 558

NEERC 17 H. Palindromic Cut 暴力(回文)

Problem H 题意:给出n个字符.问把n个字符分成k个字符串 要求:这k个字符串的长度都相同,这k个字符串都为回文. n k组字符串 每组中最多只能有一个出现奇数次的字符. 如何输出方案:先把g个奇数字符仍到每组中间,剩下的2个相同的一对,有c对 如果能平均分给每组 即c为g的倍数 则退出.否则拆掉一个偶数 增加组数后继续判定.O(127*|S|) #include us

noone0的博客 510
上一篇: NEERC 17 L Laminar Family (树链剖分)
下一篇: NEERC 17 G The Great Wall (treap)
Roll_Keyboard
博客等级 码龄9年 10粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值