LOJ#2985. 「WC2019」I 君的商店

一道很神仙的题啊QAQ

居然是智商题……不是乱搞或者是大数据

我们可以用2N问出一个最大值是1

然后对于任意两个值\(x + y\)和\(a\)比较

如果\(x + y \leq a\),那么其中的最小值是\(0\)

如果\(x + y \geq a\)那么其中的最大值是1

我们比较\(x\)和\(y\)的大小,总可以得到一个数的确定值

这是\(7N\)的

而如果我们直接选三个数\(x,y,a\)

用2的代价使得\(x \geq y\)

如果$x + y \leq a $

那么\(y\)必然是0

否则把现在\(a\)扔进一个序列里,\(x\)成为新的\(a\),\(y\)成为新的\(x\)

这样的话我们会得到一个递增序列和一个单出来的值,通过二分把这个单出来的值塞进序列里,所有的1必然都在这个序列里

那么我们可以二分,找准可能的最后一个0的位置,要么这个位置和它的前一个位置是00,要么就是11,最后一位必然是1,通过这个找到最后一个0的位置,序列后面的就都是1了

#include "shop.h"
#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 100005
#define ba 47
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 +c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
vector<int> line,possible;
int S[5],T[5],k,res[MAXN];
int cmp(int a,int b) {// return a >= b
S[0] = b;T[0] = a;
return query(S,1,T,1);
}
void Binary() {
possible.clear();
for(int i = -1 ; i < (int)line.size() - 1 ; i++) {
int t = (line.size() - i - 1) ^ k ^ 1;
if(t & 1) possible.pb(i);
}
int l = 0,r = possible.size() - 1;
while(l < r) {
int mid = (l + r + 1) >> 1;
int x = possible[mid];
S[0] = line[x];S[1] = line[x - 1];T[0] = line.back();
if(query(S,2,T,1)) l = mid;
else r = mid - 1;
}
int x = possible[l];
for(int i = x + 1 ; i < line.size() ; ++i) res[line[i]] = 1;
}
void find_price(int task_id, int N, int K, int ans[]) {
memset(res,0,sizeof(res));
k = K;
if(N == 1) {ans[0] = 1;return;}
line.clear();
if(task_id == 3) {
if(cmp(N - 1,0)) {
for(int i = 0 ; i < N ; ++i) line.pb(i);
}
else {
for(int i = N - 1 ; i >= 0 ; --i) line.pb(i);
}
}
else {
int a = 0,x = 1,y;
for(int i = 2 ; i < N ; ++i) {
y = i;
if(cmp(y,x)) swap(y,x);
S[0] = x;S[1] = y;T[0] = a;
if(query(S,2,T,1)) {//x + y <= a }
else {
line.pb(a);
a = x;x = y;
}
}
line.pb(a);
int l = 0,r = line.size() - 1;
if(cmp(x,line[r])) line.pb(x);
else {
while(l < r) {
int mid = (l + r) >> 1;
if(cmp(line[mid],x)) r = mid;
else l = mid + 1;
}
line.insert(line.begin() + l,x);
}
}
Binary();
for(int i = 0 ; i < N ; ++i) {
ans[i] = res[i];
}
return ;
}

【LOJ】#2985. 「WC2019」I 君的商店的更多相关文章

  1. LOJ #2985. 「WC2019」I 君的商店

    传送门 搬题解QwQ 首先最大值一定为 \(1\),直接扫一遍两两比较 \(O(2N)\) 求出最大值 设最大值位置为 \(a\),对于任意两个没有确定的位置 \(x,y\) 询问 \([a,x+y] ...

  2. loj2985「WC2019」I 君的商店(二分,思维)

    loj2985「WC2019」I 君的商店(二分,思维) loj Luogu 题解时间 真的有点猛的思维题. 首先有一个十分简单的思路: 花费 $ 2N $ 确定一个为 $ 1 $ 的数. 之后每次随 ...

  3. LOJ#2983. 「WC2019」数树

    传送门 抄题解 \(Task0\),随便做一下,设 \(cnt\) 为相同的边的个数,输出 \(y^{n-cnt}\) \(Task1\),给定其中一棵树 设初始答案为 \(y^n\),首先可以发现, ...

  4. LOJ#2983. 「WC2019」数树 排列组合,生成函数,多项式,FFT

    原文链接www.cnblogs.com/zhouzhendong/p/LOJ2983.html 前言 我怎么什么都不会?贺忙指导博客才会做. 题解 我们分三个子问题考虑. 子问题0 将红蓝共有的边连接 ...

  5. 【LOJ】#2983. 「WC2019」数树

    LOJ2983. 「WC2019」数树 task0 有\(i\)条边一样答案就是\(y^{n - i}\) task1 这里有个避免容斥的方法,如果有\(i\)条边重复我们要算的是\(y^{n - i ...

  6. loj3161「NOI2019」I 君的探险(随机化,整体二分)

    loj3161「NOI2019」I 君的探险(随机化,整体二分) loj Luogu 题解时间 对于 $ N \le 500 $ 的点,毫无疑问可以直接 $ O(n^2) $ 暴力询问解决. 考虑看起 ...

  7. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  8. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  9. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

随机推荐

  1. Android项目实战登录&注册

    由于项目中大部分界面都有一个后退键和一个标题栏,为避免代码冗杂以及便于利用,我们可以将后推荐和标题栏单独抽取出来定义一个标题栏布局,在 res/layout 目录下新建一个 Layout resour ...

  2. Go程序的一生是怎样的?

    Go 程序是怎样跑起来的 原创: 饶全成 码农桃花源  刚开始写这篇文章的时候,目标非常大,想要探索 Go 程序的一生:编码.编译.汇编.链接.运行.退出.它的每一步具体如何进行,力图弄清 Go 程序 ...

  3. 2016 NEERC, Northern Subregional Contest G.Gangsters in Central City(LCA)

    G.Gangsters in Central City 题意:一棵树,节点1为根,是水源.水顺着边流至叶子.该树的每个叶子上有房子.有q个询问,一种为房子u被强盗入侵,另一种为强盗撤离房子u.对于每个 ...

  4. heartrbeat实现web服务器高可用

    今天的内容是用heartbeat实现web服务器高可用 一.简介: heartbeat的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行 ...

  5. 2.RabbitMq-持久化

    RabbitMq-消息持久化 问题:怎样保证消息不因生产者gg而丢失我们知道了如何在消费者的角度保证消息不丢失,但如果生产者gg了呢,消息同样会丢失,生产者gg后会默认丢弃所有的消息,除非告诉它某些消 ...

  6. Spring学习随笔(2):Eclipse下Spring环境配置+入门项目

    1 准备工作 (按需下载) Eclipse 下载:http://www.eclipse.org/downloads/eclipse-packages/ : Spring 下载:http://repo. ...

  7. vmware 中Linux系统怎么连接外网?

    VMware虚拟机有三种网络模式,分别是Bridged(桥接模式).NAT(网络地址转换模式).Host-only(主机模式). VMware workstation安装好之后会多出两个网络连接,分别 ...

  8. DDCTF-2019-writeup(7web+5misc)

    一年前第一次参加了DDCTF,再次参加简单记录下web与misc的writeup Web Web1 滴~ 1.jpg参数可以包含文件,参数经过两次base64和一次16进制编码,将index.php编 ...

  9. easyUI之表单

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  10. Linux命令集锦:ansible命令

    ansible 命令主要用于批量管理,来实现自动化管理.常用批量操作包括:主机分组管理.实时批量执行命令或脚本.实时批量分发文件或目录.定时同步文件等. 一.安装 ansible yum instal ...