博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【loj2985】【WC2019】I君的商店
阅读量:7282 次
发布时间:2019-06-30

本文共 1486 字,大约阅读时间需要 4 分钟。

题目

交互题;

\(n\)个物品,每个物品的价格为0或者1;

给出为1的物品的个数奇偶性k,并保证至少有一个价格为1;

每次可以询问一个集合S的另一个集合T的价值和的大小,交互库会返回>=或者<=;

一次交互的代价为|S|+|T|,总阈值为M;

问每个物品的价值;

\(n \le 10^5 \ , \ M = 500100 \ , \ K=0/1\); 

题解

  • 利用\(2N\)次找出最大的数,即1

    接下来对于\(x \le y\),如果\(x+y\le 1\) ,则\(x=0\),否则\(y=1\)

    复杂度:\(O(7N)\) ;

  • 随便找一个\(z\),比较\(x+y\)\(z\)

    \(x+y \le z\) , 则\(x = 0\)

    \(x+y \ge z\),则\(y \ge z\),用\(y\)去替代\(z\)

    最后会的到很多0和一条单调递增的链,同时最后\(max(x,z) = 1\),得到一个1;

    根据sub3的做法在链上二分,利用奇偶性判断\(mid\)位置的答案;

    复杂度:\(O(5N+ 3log \ N)\) ;

    #include "shop.h"#include
    using namespace std;const int N=100010;int st[N],top,q1[N],t1,q2[N],t2;bool cmp1(int a,int b){ q1[0]=a,q2[0]=b; return query(q1,1,q2,1);}bool cmp2(int a,int b,int c){ q1[0]=a,q1[1]=b;q2[0]=c; return query(q1,2,q2,1);}void swp(int&a,int&b){if(!cmp1(a,b))swap(a,b);}void find_price(int id,int n,int k,int ans[]){ top=0; if(n==1){ans[0]=k;return;} if(n==2){ int x=0,y=1;swp(x,y); if(k)ans[y]=1,ans[x]=0; else ans[x]=ans[y]=1; return ; } if(id==3){ if(!cmp1(0,n-1)){ int l=1,r=n-1; while(l
    >1; if(cmp2(mid-1,mid,0))r=mid; else l=mid+1; } --l; for(int i=0;i
    >1; if(cmp2(mid,mid+1,n-1))l=mid+1; else r=mid; } for(int i=0;i
    >1; if(cmp2(st[mid],st[mid+1],z))l=mid+1; else r=mid; } for(int i=1;i

转载于:https://www.cnblogs.com/Paul-Guderian/p/10801601.html

你可能感兴趣的文章
PSR-1 基础编码规范
查看>>
Hive UDF开发实例学习
查看>>
5B - 一只小蜜蜂...
查看>>
消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe
查看>>
dns 查询中的ANY类型
查看>>
ORA-600 各个参数含义说明
查看>>
虚拟地址转换为物理地址【转】
查看>>
linux中的优先搜索树的实现--prio_tree【转】
查看>>
php抽象类和接口
查看>>
php 解压 .gz 文件
查看>>
EM算法
查看>>
Binary Tree Longest Consecutive Sequence
查看>>
实战:RIP和EIGRP路由再发布
查看>>
统计数据库大小
查看>>
python运维开发之socket网络编程02
查看>>
细品慢酌QuickTest关键视图(3)
查看>>
redis的导入导出需要特别注意的地方
查看>>
理解思科IPS系统的virtual sensor
查看>>
疯狂ios讲义之创建cocos2d项目(3)
查看>>
《信息系统项目管理师软考辅导——3年真题详解与全真模拟》主要创新点、关注点...
查看>>