首页 > 其他分享 >CodeForces - 1698D Fixed Point Guessing

CodeForces - 1698D Fixed Point Guessing

时间:2023-01-08 14:11:06浏览次数:60  
标签:std Guessing const Point int 奇数 mid 区间 Fixed

CodeForces - 1698D Fixed Point Guessing

题解:二分+交互题

题目给出询问次数为15次,而\(3<=n<10^4\),很明显是二分

题目想要我们找出在数组长度n为奇数的情况下,交换\(\frac{n-1}{2}\)对互不干扰的元素,让我们找出哪一个元素没有被交换

直接看样例

4 2 5 1 3

第一次我们二分区间得到\([1,2]和[3,5]\),当我们询问\([1,2]\)区间时,系统回答:2 4,我们发现4并不属于[1,2]区间,所以2肯定是答案,我们来分析一下:[1,2]区间长度为偶数,而区间内只有奇数个不是本区间的数,说明剩下的是本区间的数的数量也是奇数个,我们知道交换是两两交换,如果现在区间是[1,4],系统给出里面元素为1 2 3 4

这说明这个区间里面肯定有两对交换了,所以答案一定是5,所以如果剩下的是本区间的数的数量为偶数,代表答案不在这个区间内,如果是奇数,说明答案一定在这个区间内

#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 1e4 + 10;
int n;
int l, r;
bool check(int mid)
{
    int cnt = 0;
    cout << "? " << l << " " << mid << endl;
    for (int i=l;i<=mid;++i)
    {
        int x;
        cin >> x;
        if (x>=l && x<=mid)
            cnt++;
    }
    if (cnt&1)
        return 1;
    else
        return 0;
}   
int main(void)
{
    Zeoy;
    int t = 1;
    cin >> t;
    while (t--)
    {
        cin >> n;
        l = 1, r = n;
        while (l <= r)
        {
            int mid = l + r >> 1;
            if (check(mid))
                r = mid - 1;
            else
                l = mid + 1;
        }
        cout << "! " <<l << endl;
    }
    return 0;
}

标签:std,Guessing,const,Point,int,奇数,mid,区间,Fixed
From: https://www.cnblogs.com/Zeoy-kkk/p/17034624.html

相关文章

  • [LeetCode] 149. Max Points on a Line
    Givenanarrayof points where points[i]=[xi,yi] representsapointonthe X-Y plane,return themaximumnumberofpointsthatlieonthesamestraig......
  • Endpoint Detection & Response,EDR
    端点检测与响应(EndpointDetection&Response,EDR)是一种主动式端点安全解决方案,通过记录终端与网络事件,将这些信息本地化存储在端点或者集中在数据库。EDR会集合已知的......
  • Flutter 陈航 19-手势识别 PointerEvent GestureDetector GestureRecognizer
    本文地址目录目录目录19|用户交互事件该如何响应?指针事件ListenerListener完整代码手势识别GestureDetector拖拽和缩放手势竞技场竞技场默认行为改变竞技场行为Gestu......
  • 解决java.lang.NullPointerException报错以及分析出现的几种原因
    1、字符串变量未初始化2、接口类型的对象没有用具体的类初始化,比如:Mapmap//会报错Mapmap=newMap();//则不会报错了3、当一个对象的值为空时,你没有判断为空的情......
  • spark中的持久化机制以及lineage和checkpoint(简含源码解析)
    spark相比MapReduce最大的优势是,spark是基于内存的计算模型,有的spark应用比较复杂,如果中间出错了,那么只能根据lineage从头开始计算,所以为了避免这种情况,spark提供了两种持......
  • Point中的三个静态方法
    翻老贴的时候,找到了春叶飘零(2006-10-12)的这篇文章:importflash.geom.Pointvar__pointOld:Point=newPoint(mouseX,mouseY)//获取鼠标初始位置this.addEventListener("ent......
  • Asp.Net Core EndPoint 终结点路由工作原理解读
    一、背景在本打算写一篇关于Identityserver4的文章时候,却发现自己对EndPoint-终结点路由还不是很了解,故暂时先放弃了IdentityServer4的研究和编写;所以才产生了今天这篇......
  • 重磅直播 | CenterPoint:三维点云目标检测算法梳理及最新进展(CVPR2021)
    本期由德州大学奥斯汀分校在读生尹天为分享,分享的主题为《CenterPoint:三维点云目标检测算法梳理及最新进展(CVPR2021)》,主讲人会对该领域的核心和主流技术进行详细讲解,欢迎大......
  • L2-005 集合相似度 (25 point(s))
    给定两个整数集合,它们的相似度定义为:Nc/Nt×100%。其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相......
  • L2-006 树的遍历 (25 point(s))
    给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行......