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);
}
AD9826的时序分析及Verliog代码 AD9826的时序分析及Verliog代码 (本文对AD9826的模式和时序进行了分析,如有错误敬请指正,关于这款ADC芯片的基本参数,本文不做过多介绍) 1、AD9826的模式 AD9826的采样模式主要有两种,一种是“CDS模式”,一种是“SHA模式”;在这两种模式下分别有1通道、2通道、3通道的采样模式 (1)CDS模式 简单的来说CDS模式就是,有两个采样时钟,一个是ADCCLK1,用来采样CCD波形的参考电平,一个是ADCCLK2用来采样数据电平,然后经过,偏移量调节,再经过PGA增益放大最 阅读详情

相关推荐

Python 中调用 R 语言的教程(包含编码问题解决办法)

rpy2 是一个 Python 库,允许在 Python 中直接运行 R 代码并实现数据转换。安装需确保 Python 和 R 环境正确配置,Windows 用户需注意编码问题(GBK 错误可通过控制面板调整区域设置解决)。基本用法包括执行 R 代码、传递数据(支持 Python 与 R 数据类型自动转换)以及调用 R 包函数。通过 robjects.r() 执行 R 代码,使用 pandas2ri 转换器处理 DataFrame 数据交换,并支持像导入 Python 模块一样加载 R 包(如 import

zygalaxy的博客 995

(交互题)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

Spark Graphx 项目实战(航班飞行网图分析)

航班飞行网图分析一.需要的技能点二.任务描述三.数据探索1.下载数据2.数据格式四.航班飞行网图问题分析1.构建航班飞行网图2.统计航班飞行网图中机场与航线的数量3.计算最长的飞行航线4.找出最繁忙的机场5.找出最重要的飞行航线6.找出最便宜的飞行航线五.代码实现 一.需要的技能点 Spark GraphX API Spark GraphX PageRank Spark GraphX Pregel 二.任务描述 需求概述: 探索航班飞行网图数据 构建航班飞行网图 使用Spark GraphX完成下列任

May_J_Oldhu的博客 1538

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

STM32F103C8T6的PC13-15引脚配置避坑指南:为什么你的IO口不工作?

本文详细解析了STM32F103C8T6的PC13-15引脚作为普通IO口不工作的原因及解决方案。这三个引脚默认关联侵入检测和低速外部时钟等特殊功能,需先禁用TAMPER和LSE,并开启AFIO时钟,才能正确配置为普通GPIO。文章提供了标准外设库和HAL库的配置步骤、常见问题排查方法及硬件设计注意事项。

weixin_29169899的博客 523

给宇树Go2机器人装‘眼睛’:在Jetson Orin Nano上从零部署YOLOv5的保姆级避坑实录

本文详细介绍了在Jetson Orin Nano上为宇树Go2机器人部署YOLOv5视觉系统的完整流程,涵盖硬件选型、环境配置、模型优化及系统集成等关键步骤。针对机器人应用场景特有的离线部署、版本冲突和实时推理等挑战,提供了实用的解决方案和性能优化技巧,帮助开发者快速实现机器人的视觉能力升级。

weixin_29169505的博客 378

交互题入门

纪念一下第一次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

Basilisk库教程

要在仿真中执行模块,其调度由Basilisk的[Process]和[Task]容器控制。BSK[Task]包含一系列模块,这些模块都以相同的更新频率执行。一个[Process]本质上是一个任务组,可以包含多个相关的任务。例如,在多星仿真中,你可以为每颗卫星创建一个[Process],以便将相关任务和嵌入式模块有序地组织起来。下图展示了一个示例布局,其中bskSat卫星的动力学被添加到与飞行软件(FSW)算法分开的进程中,这些算法在该卫星上执行。在每个进程中,设置了若干任务,这些任务以指定的频率进行评估。

weixin_57997461的博客 1138

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

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

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

ROS牛耕法全覆盖规划:从算法原理到清洁机器人实战解析

本文深入解析ROS牛耕法全覆盖规划算法在清洁机器人中的应用,从算法原理到实战优化技巧全面覆盖。详细介绍了地图预处理、区域分解和路径优化等关键步骤,并分享实际案例中的解决方案,帮助开发者提升机器人清扫效率和覆盖率。

weixin_27013291的博客 392

实干派!网易易盾增强版滑块验证码,全方位讲解识别思路(含源码)

该验证码是异形滑块验证码中的一种,缺口旋转+偏移的处理需要你有很好的图像处理知识,能很好的处理透明通道,同时,该验证码需要你能很好的处理缺口和背景之间匹配的关系,该验证码的处理难点就是两个缺口之间如何找到正确的,两个检测框都有很强的相似度,且加上背景图的干扰,在图像处理和有优化上难度大大增加。

码王吴彦祖的博客 2016

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

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

m0_37711725的博客 3420

Week 9 10 Neural Networks

Week 9 10 Neural Networks

金州饿霸吃不饱的博客 404

赛肯德 | 2017NEERC某题

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

weixin_30468137的博客 171

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

非传统题初探——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

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

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

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、付费专栏及课程。

余额充值