码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Codeforces Round #803 (Div. 2) VP补题


    D. Fixed Point Guessing

    大意:
    有一个1-n的升序排序,从中选n-1/2对不相交的数字进行交换,会有一个数字是没有动的。

    操作过后会得到一个最终序列。

    交互问题。每次询问l,r,返回最终序列的l到r元素的升序排列

    15个问题内找到没有改变位置的元素

    思路:

    做倒是做出来了,只是过程有点艰辛。。。(又是读不懂题的一天

    n的范围有1e4那么大,但是只能问15个问题,差不多就是1/log的级别,那么自然就可以想到二分.

    每次处理一个区间的话,就可以将区间分成两个部分,不妨先查左半部分,如果左半部分没问题,就意味着我们的答案在右半部分。

    现在唯一的问题就是如何判断一个区间有没有问题了。

    不妨定义一个元素对于一个区间是合法的,如果它的元素值满足val>=l&&val<=r。

    现在考察我们的区间,在该区间内合法的元素,它只有两种情况:
    1.它没有交换过,这个就是我们需要的答案。

    2.它交换了,但是它仍在区间内,所以它是与区间内的另一个元素交换的,从这我们可以看出,交换过的合法元素一定是成对的。

    所以:

    如果当前区间内的合法数字有奇数个,那就一定是若干对交换的合法元素和一个答案,我们再对这个区间进行二分就可以了。如果有偶数个的话,那么久说明答案再另一个区间了。

    最后区间范围变成1的时候,那个值就是答案。

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. #define ll long long
    4. const ll N=2e5+10;
    5. ll n,m,k;
    6. ll t;
    7. ll a;
    8. ll mas[N];
    9. void cx(ll l,ll r)
    10. {
    11. if(l==r)
    12. {
    13. std::cout<<"? "<<l<<' '<<r<<endl;
    14. cin>>a;
    15. std::cout<<"! "<<a<<endl;
    16. return;
    17. }
    18. ll mid=l+r>>1;
    19. ll cnt=0;
    20. std::cout<<"? "<<l<<" "<<mid<<endl;
    21. for(int i=1;i<=mid-l+1;++i) std::cin>>mas[i];
    22. for(int i=1;i<=mid-l+1;++i)
    23. {
    24. if(mas[i]>=l&&mas[i]<=mid) cnt++;
    25. }
    26. if(cnt%2)
    27. {
    28. cx(l,mid);
    29. }
    30. else cx(mid+1,r);
    31. }
    32. void solve()
    33. {
    34. std::cin>>n;
    35. cx(1,n);
    36. }
    37. int main()
    38. {//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    39. std::cin>>t;
    40. while(t--)
    41. {
    42. solve();
    43. }
    44. return 0;
    45. }

    (不知道为啥,总感觉交互题比普通题更有意思。。。)

     

  • 相关阅读:
    十、Spring Boot 安全管理(4)
    数据库 | 数据库概述、关系型数据库、非关系型数据库
    排序---P1116 车厢重组
    shell 脚本语句
    MySQL库的操作
    如何快速清理已经上传到Git仓库的.DS_Store文件
    学物理的计算机不错是什么体验
    大话超越菜鸟C#的实践入门进阶必知点,深入浅出解析 33 算法逻辑入门 抽象现实世界之大佬打一眼看不明白的代码,才是够技术含量的代码类
    跨平台使用:第三方美颜SDK在多种操作系统上的应用
    C语言-杨辉三角的三种解法-简单易懂篇
  • 原文地址:https://blog.csdn.net/sophilex/article/details/125538176
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号