NOIP 模拟 $21\; \rm Game$
题解
考试的时候遇到了这个题,没多想,直接打了优先队列,但没想到分差竟然不是绝对值,自闭了。
正解:
值域很小,所以我们开个桶,维护当前最大值。
如果新加入的值大于最大值,那么它肯定直接被下一个人选走。
如果不大于这个最大值,那么直接选择最大值,同时对最大值的桶减一,如果最大值的桶为零,那么往下跳值域直到一个桶不为零的。
因为这个最大值是单调不增的,所以时间复杂度一次是 \(\mathcal O\rm (n)\) 总的就是 \(\mathcal O\rm (nk)\)。
代码很好打,知道思路后五分钟就能打出来
#include<bits/stdc++.h>
#define ri register signed
#define p(i) ++i
using namespace std;
namespace IO{
    char buf[1<<21],*p1=buf,*p2=buf;
    #define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
    template<typename T>inline void read(T &x) {
        ri f=1;x=0;register char ch=gc();
        while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=gc();}
        while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
        x=f?x:-x;
    }
}
using IO::read;
namespace nanfeng{
    #define FI FILE *IN
    #define FO FILE *OUT
    template<typename T>inline T cmax(T x,T y) {return x>y?x:y;}
    template<typename T>inline T cmin(T x,T y) {return x>y?y:x;}
    typedef long long ll;
    static const int N=1e5+7;
    int nm[N],T[N],p,k,n,mx,fg=0,num;
    ll ans1,ans2;
    inline int main() {
        // FI=freopen("nanfeng.in","r",stdin);
        // FO=freopen("nanfeng.out","w",stdout);
        read(n),read(k);
        for (ri i(1);i<=n;p(i)) read(nm[i]);
        for (ri i(1);i<=k;p(i)) {
            read(p);
            ans1=ans2=0;
            num=mx=fg=0;
            for (ri i(1);i<=p;p(i)) p(T[nm[i]]),mx=cmax(mx,nm[i]);
            while(1) {
                if (!fg) ans1+=mx;
                else ans2+=mx;
                fg^=1;
                T[mx]-=1;
                p(num);
                while (!T[mx]) --mx;
                p(p);
                while (p<=n&&nm[p]>mx) {
                    if (!fg) ans1+=nm[p];
                    else ans2+=nm[p];
                    p(num);
                    fg^=1;
                    p(p);
                }
                if (p<=n) T[nm[p]]+=1;
                if (num==n) break;
            }
            printf("%lld\n",ans1-ans2);
        }
        return 0;
    }
}
int main() {return nanfeng::main();}
NOIP 模拟 $21\; \rm Game$的更多相关文章
- NOIP 模拟 $21\; \rm Median$
		题解 \(by\;zj\varphi\) 对于这个序列,可以近似得把它看成随机的,而对于随机数列,每个数的分布都是均匀的,所以中位数的变化可以看作是常数 那么可以维护一个指向中位数的指针,同时维护有多 ... 
- NOIP 模拟 $21\; \rm Park$
		题解 \(by\;zj\varphi\) 首先,分析一下这个答案:本质上是求在一条路径上,选择了一些点,这些点的贡献是它周围的点权和 - 它上一步的点权 对于一棵树,可以先确定一个根,然后每条路径就可 ... 
- NOIP模拟3
		期望得分:30+90+100=220 实际得分:30+0+10=40 T1智障错误:n*m是n行m列,硬是做成了m行n列 T2智障错误:读入三个数写了两个%d T3智障错误:数值相同不代表是同一个数 ... 
- NOIP模拟 1
		NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. # 用 户 名 ... 
- 2021.5.22 noip模拟1
		这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ... 
- NOIP 模拟 $38\; \rm c$
		题解 \(by\;zj\varphi\) 发现就是一棵树,但每条边都有多种不同的颜色,其实只需要保留随便三种颜色即可. 直接点分治,将询问离线,分成一端为重心,和两端都不为重心的情况. 每次只关心经过 ... 
- NOIP 模拟 $36\; \rm Cicada 拿衣服$
		题解 \(by\;zj\varphi\) 发现右端点固定时,左端点的 \(min-max\) 单调递减,且对于 \(or\) 和 \(and\) 相减,最多有 \(\rm2logn\)个不同的值,且相 ... 
- NOIP 模拟 $36\; \rm Dove 打扑克$
		题解 \(by\;zj\varphi\) 引理 对于一个和为 \(n\) 的数列,不同的数的个数最多为 \(\sqrt n\) 证明: 一个有 \(n\) 个不同的数的数列,和最小就是 \(n\) 的 ... 
- NOIP 模拟 $34\; \rm Equation$
		题解 \(by\;zj\varphi\) 发现每个点的权值都可以表示成 \(\rm k\pm x\). 那么对于新增的方程,\(\rm x_u+x_v=k\pm x/0\) 且 \(\rm x_u+x ... 
随机推荐
- 团队开发day02
			进行android的UI界面设计,设计圆角输入框和圆形按钮, 以及点击的水滴效果 遇到问题,新建的drawable布局没有达到预期的效果,圆形按钮的 背景想设置为图片,但是发现会遮盖住水滴效果,改用新 ... 
- CSS 样式清单整理
			1.文字超出部分显示省略号 单行文本的溢出显示省略号(一定要有宽度) p{ width:200rpx; overflow: hidden; text-overflow:ellipsis; white- ... 
- SQL注入:sqli-labs lesson-1 小白详解
			为什么是小白详解?因为我就是小白 SQL注入早有耳闻,今天算是真正打开这个门了,但是想要跨进去应该还是没有那么容易. 在B站上听了40分钟的网课,老实说,他讲的还不错,第一遍听不懂也正常 https: ... 
- 【LeetCode】12. 整数转罗马数字
			12. 整数转罗马数字 知识点:字符串 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 100 ... 
- Easyui动态添加控件无法渲染 $.parser.parse()无效
			本文链接:https://blog.csdn.net/huangbaokang/article/details/78367553动态添加easyui控件<input class="ea ... 
- 从源码构建Vim
			从源码构建Vim 引言 事情是介样滴,因为我是个Vim 重度使用者了差不多.. 但在大部分系统上能安装到的或者自带的都是比较老的版本,可能是7.x 之类的.也或者是你需要使用到Vim 的某些特性或者功 ... 
- java常见的面试题(二)
			1.mybatis 中 #{}和 ${}的区别是什么? #{}是预编译处理,${}是字符串替换: Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的 ... 
- java 8新特性  并行流
			使用并行流,提高cpu利用率,提高运算速度 /** * java 8并行流 * 底层运用fork join框架 */ @Test public void test(){ Instant start = ... 
- 七个对我最重要的职业建议)--转载来自ruanyifeng博客
			原文:http://www.ruanyifeng.com/blog/2015/09/career-advice.html 一.不要别人点什么,就做什么 我的第一份工作,只干了8个月,那家公司就倒闭了. ... 
- python中进程详解
			1:pdb调试:基于命令行的调试工具,非常类似gnu和gdb调试,以下是常用的调试命令: 可以python -m pdb xxx.py(你的py文件名)进入命令行调试模式 命令 简写命令 作用 bea ... 
