zoukankan      html  css  js  c++  java
  • UOJ52【UR #4】元旦激光炮【交互】

    这是一道交互题

    交互库有三个长为 (n_a,n_b,n_c) 的不降正整数序列 (a,b,c),不超过 (100) 次单点查询求 (k)-th。

    (n_a,n_b,n_cle 10^5)(a_i,b_i,c_ile 10^9)


    完全不会,牛逼坏了。

    考虑归并排序的过程,必定有至少一个序列扔掉了前 (lfloorfrac k3 floor) 个元素,并且询问 (a,b,c) 的第 (lfloorfrac k3 floor) 个元素,求出最小值就可以找到对应序列,使得 (k:=k-lfloorfrac k3 floor)。当 (kle 2) 时暴力 (6) 次询问全求出来。

    这个跟之前一道 300iq 题很像:(a+bge k) 可以拆成 (log k)(agefrac k2lor bgefrac k2),转化为单点打标记。

    #include"kth.h"
    #include<bits/stdc++.h>
    #define PB emplace_back
    using namespace std;
    namespace {
    int n[3], p[3];
    int ask(int o, int x){
    	x += p[o]-1;
    	if(x >= n[o]) return INT_MAX;
    	switch(o){
    	case 0: return get_a(x);
    	case 1: return get_b(x);
    	} return get_c(x);
    }}
    int query_kth(int na, int nb, int nc, int k){
    	n[0] = na; n[1] = nb; n[2] = nc;
    	while(k > 2){
    		int l = k/3, a[3] = {ask(0, l), ask(1, l), ask(2, l)};
    		if(a[0] < a[1] && a[0] < a[2]) p[0] += l;
    		else if(a[1] < a[2]) p[1] += l;
    		else p[2] += l; 
    		k -= l;
    	}
    	vector<int> tmp;
    	for(int i = 0;i < 3;++ i)
    		for(int j = 1;j < 3;++ j)
    			tmp.PB(ask(i, j));
    	nth_element(tmp.begin(), tmp.begin()+k-1, tmp.end());
    	return tmp[k-1];
    }
    
  • 相关阅读:
    ElasticSearch 2 (15)
    ElasticSearch 2 (14)
    ElasticSearch 2 (13)
    ElasticSearch 2 (12)
    浅谈 Comet、SSE、WebSocket
    js快速将字符串数组转化为数字数组(互换)
    如何给自己的vue组件做一个提示
    顶级域名和子级域名之间的cookie共享和相互修改、删除
    前端工程化
    数据校验工具 data-police
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/14878760.html
Copyright © 2011-2022 走看看