题目链接:点击查看

题目大意:规定一个含有n个元素的数组a,每个元素互不相等,但是全部未知,现在给出一台机器,这台机器有两个参数,分别是k和m,其意义是每次可以询问k个下标,机器将给出k个下标中第m大的下标及其数值,现在k已知,要求在不超过n次询问的情况下确定出m的大小

题目分析:看到这个题目给出的数据范围是1<=m<=k<n,我第一反应就是n其实没有什么用,关键在于k,为了确定m,我们可以随意取k+1个固定的数,每次可以删除掉其中的一个,这样对于剩下的k个数进行不同组合应该是可以确定出m的,为了方便我们直接取前k+1个数来进行操作就好了,后来我想了想可不可以二分呢,大体思路就是先求出来1~k中第m大的数,然后二分乱搞,后来也不知道怎么还让我乱搞过去了六组测试点,但突然一下子回过神来发现这个题目并不能二分,仔细想了一下我二分的其实是下标,本来一开始是想二分m的,但是m是不能二分得到的,于是赶快转换思路

好在一开始的方向没有错,就是在前k+1个数中,每次删掉一个数形成k+1种不同的组合,接着向下该怎么想呢?其实可以将全部情况大致分为下列两种来思考:

  1. m<=k/2
  2. m>k/2

为什么这样想呢,首先我们笼统的分析一下,若删掉前k+1中的某个数x,对机器造成的影响会是什么:

  1. 如果x在前k+1个数中的大小大于m,那么机器返回的答案一定是第m大的数的相关数据
  2. 如果x在前k+1个数中的大小小于等于m,那么机器返回的答案一定是第m+1大的数的相关数据

仔细斟酌一下上面两句话,我们可以发现,如果以ans1表示第m大的数出现的次数,用ans2表示第m+1大的数出现的次数,那么答案一定是ans2,且ans1+ans2=k+1

如此一来我们只需要记录一下第m+1大的数出现的次数就能直接求出答案了

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=50;map<int,int>mp;int n,k;void print(int x)
{printf("?");for(int i=1;i<x;i++)printf(" %d",i);for(int i=x+1;i<=k+1;i++)printf(" %d",i);printf("\n");fflush(stdout);
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);scanf("%d%d",&n,&k);for(int i=1;i<=k+1;i++){print(i);int pos,val;scanf("%d%d",&pos,&val);mp[val]++;}printf("! %d\n",mp.rbegin()->second);return 0;
}

CodeForces - 1270D Strange Device(思维+构造)相关推荐

  1. CodeForces - 1291D Irreducible Anagrams(思维+构造)

    题目链接:点击查看 题目大意:首先规定两个字符串 s 和 t 为 Anagrams ,当且仅当字符串 t 可以通过字母重新排列后得到 s ,也就是每个字符出现的次数相同,但位置不做要求,紧接着规定另一 ...

  2. CodeForces - 125C Hobbits' Party(思维+构造)

    题目链接:点击查看 题目大意:有一个派对,现在有 n 个人参加,题目要求我们构造出一种参加方式,满足条件且可以维持的天数最大: 任意两天中至少有一个相同的人参加 任意三天中不能有一个相同的人参加 输出 ...

  3. CodeForces - 1270C Make Good(思维+构造)

    题目链接:点击查看 题目大意:给出一个由n个数字构成的数列,现在已知其累加和为sum,异或和为xor,现在允许我们向数列中添加0~3个数,以满足sum=2*xor,构造出任意一种方案 题目分析:一开始 ...

  4. CodeForces - 1504C Balance the Bits(思维+构造)

    题目链接:https://vjudge.net/problem/CodeForces-1504C 题目大意:给出一个长度为 nnn 的 010101 串,现在要求构造出两个长度为 nnn 的合法括号序 ...

  5. Codeforces Round #732 (Div. 2) C. AquaMoon and Strange Sort 思维

    传送门 文章目录 题意: 思路: 题意: 给你nnn个数,每个数初始方向是向右,每次可以交换相邻两个位置并且将这两个位置的方向调换,问这个序列的最终状态能否是非递减且方向都向右. n≤1e5,ai≤1 ...

  6. Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造

    传送门 文章目录 题意: 思路: 题意: 给你n,dn,dn,d,让你构造有nnn个点的二叉树,他们每个节点深度和为ddd. n,d≤3000n,d\le 3000n,d≤3000. 思路: 先考虑不 ...

  7. 【CodeForces - 798D】Mike and distribution (思维构造,贪心,黑科技)

    题干: Mike has always been thinking about the harshness of social inequality. He's so obsessed with it ...

  8. CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)

    题目链接:点击查看 题目大意:给出a个0,b个1,c个2,d个3,要求构造一种序列,使得数列两两之间绝对值之差等于1,若不能构造输出NO 题目分析:首先我们需要稍微讨论一下特殊情况,那就是对于两端的数 ...

  9. CodeForces - 618B Guess the Permutation(思维+构造)

    题目链接:点击查看 题目大意:先给出一个长度为n的序列ai,这个序列是1~n全排列中的其中一种,再给出一个n*n的矩阵,maze[i][j]=val代表min(ai,aj)=val,要求我们构造出原始 ...

最新文章

  1. 2021年图灵奖,花落高性能计算先驱、田纳西大学教授Jack Dongarra
  2. 前端基础--javascript 基础
  3. node-sass 下载失败 解决方案
  4. 创意总监分享:我是如何做一款手游地图的
  5. 桂林电子科技大学C语言大作业,桂林电子科技大学c语言程序设计习题集及答案qvzaewzm.doc...
  6. javascript-索引1908
  7. Spring Boot + Spring Cloud 实现权限管理系统 配置中心(Config、Bus)
  8. .npy文件_python——文件读写
  9. 计算机软考网络工程师中级多少分过,2019年计算机软考网络工程师中级及格分数...
  10. 商业模式新生代_商业模式新生代——商业模式设计
  11. 威联通文件传输服务器,QNAP NAS方案-------文件共享
  12. ProPresenter 6 for Mac破解版永久激活方法
  13. 正常情况下如何卸载计算机软件?
  14. 记录一次扇贝网前端实习面试
  15. EPUB阅读器聚合-Android
  16. 浅说万能头<bits/stdc++.h>
  17. linux输入命令直接跳转到指定目录
  18. UIStackView Masonry
  19. 使用idm的一些注意事项
  20. 苹果加急审核App的办法

热门文章

  1. 关系型数据库(RDBMS)实质
  2. RabbitMQ发布确认原理
  3. 并发的发展历史-晶体管和批处理系统
  4. 构造方法注入和设值注入有什么区别?
  5. 为什么需要ORM 框架
  6. Quartz框架中的Listener
  7. 字符串转换成ascii码
  8. response设置响应头
  9. 后台服务系统之dubbo架构
  10. 部署eureka和config