[快速幂]Codeforces Round #576 (Div. 2)-C. MP3
1 second
256 megabytes
standard input
standard output
One common way of digitalizing sound is to record sound intensity at particular time moments. For each time moment intensity is recorded as a non-negative integer. Thus we can represent a sound file as an array of nn non-negative integers.
If there are exactly KK distinct values in the array, then we need k=⌈log2K⌉k=⌈log2K⌉ bits to store each value. It then takes nknk bits to store the whole file.
To reduce the memory consumption we need to apply some compression. One common way is to reduce the number of possible intensity values. We choose two integers l≤rl≤r, and after that all intensity values are changed in the following way: if the intensity value is within the range [l;r][l;r], we don't change it. If it is less than ll, we change it to ll; if it is greater than rr, we change it to rr. You can see that we lose some low and some high intensities.
Your task is to apply this compression in such a way that the file fits onto a disk of size II bytes, and the number of changed elements in the array is minimal possible.
We remind you that 11 byte contains 88 bits.
k=⌈log2K⌉ is the smallest integer such that K≤2k. In particular, if K=1, then k=0.
The first line contains two integers nn and II (1≤n≤4e5, 1≤I≤1e8) — the length of the array and the size of the disk in bytes, respectively.
The next line contains nn integers aiai (0≤≤ai≤1e9) — the array denoting the sound file.
Print a single integer — the minimal possible number of changed elements.
6 1
2 1 2 3 4 3
2
6 2
2 1 2 3 4 3
0
6 1
1 1 2 2 3 3
2
In the first example we can choose l=2,r=3l=2,r=3. The array becomes 2 2 2 3 3 3, the number of distinct elements is K=2K=2, and the sound file fits onto the disk. Only two values are changed.
In the second example the disk is larger, so the initial file fits it and no changes are required.
In the third example we have to change both 1s or both 3s.
题意:给你n个数,求最少删去多少个数才能满足剩下数的个数的种类小于等于2^(8*I/n),令K是现在数的种类,I是给出的byte,k是由K算出的bit,注意1 byte contains 8 bits,k=log2(K),n*k<=8*I,k<=8*I/n,K<=2^(k)<=2^(8*I/n),所以剩下的数的种类要<=2^(8*I/n)
注意:1 byte contains 8 bits
K<=4e5 -> ->K在int范围内 -> K<=2^(32)-1 rg<=32,不限制这个的话快速幂那会爆long long
要删去最少的数目,而用总数减去剩下的就是要删掉的,剩下的个数的种类是need,可用前缀和求出各种情况下need种数的个数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int amn=4e5+,inf=0x3f3f3f3f;
int a[amn],b[amn],c[amn];
map<int,int> mp;
ll qp(ll in){ ///快速幂
ll ans=,t=;
while(in){
if(in&)ans*=t;
in>>=;
t*=t;
}
return ans;
}
int main(){
int n,I,tp=;
cin>>n>>I;
ll rg=*I/n; ///k=log2(K),n*k<=8*I,k<=8*I/n
if(rg>32)rg=32;/// K<=4e5 -> ->K在int范围内 -> K<=2^(32)-1 rg<=32,不限制这个的话快速幂那会爆long long
for(int i=1;i<=n;i++){
cin>>a[i];
if(!mp[a[i]]) ///如果a[i]没被统计过
b[++tp]=a[i]; ///统计数有多少种
mp[a[i]]++; ///统计数的个数
}
ll need=qp(rg); ///快速幂计算最后要剩多少个,K<=2^(k)<=2^(8*I/n)
if(tp<=need)printf("0\n");
else{
sort(b+,b++tp); ///区间中从小到大
c[]=;
for(int i=;i<=tp;i++){
c[i]=c[i-]+mp[b[i]]; ///数的个数作前缀和
}
ll ans=inf;
for(int i=;i<=tp-need;i++){
ans=min(ans,(ll)n-(c[i+need]-c[i])); ///要删去最少的数目,而用总数减去剩下的就是要删掉的,剩下的个数的种类是need,可用前缀和求出各种情况下need种数的个数
}
printf("%lld\n",ans);
}
}
[快速幂]Codeforces Round #576 (Div. 2)-C. MP3的更多相关文章
- 线段树+矩阵快速幂 Codeforces Round #373 (Div. 2) E
http://codeforces.com/contest/719/problem/E 题目大意:给你一串数组a,a[i]表示第i个斐波那契数列,有如下操作 ①对[l,r]区间+一个val ②求出[l ...
- Codeforces Round #576 (Div. 2) D. Welfare State
http://codeforces.com/contest/1199/problem/D Examples input1 output1 input2 output2 Note In the firs ...
- Codeforces Round #576 (Div. 1)
Preface 闲来无事打打CF,就近找了场Div1打打 这场感觉偏简单,比赛时艹穿的人都不少,也没有3000+的题 两三个小时就搞完了吧(F用随机水过去了) A. MP3 题意不好理解,没用翻译看了 ...
- Codeforces Round #576 (div.1 + div.2)
Div2 A 长度为\(n(n≤10^5)\)的数组,每个元素不同,求有多少个位置\(d\)满足\(d - x \le j < d \And d < j \le d + y a_d< ...
- Codeforces Round #576 (Div. 1) 简要题解 (CDEF)
1198 C Matching vs Independent Set 大意: 给定$3n$个点的无向图, 求构造$n$条边的匹配, 或$n$个点的独立集. 假设已经构造出$x$条边的匹配, 那么剩余$ ...
- Codeforces Round #576 (Div. 2) 题解
比赛链接:https://codeforc.es/contest/1199 A. City Day 题意:给出一个数列,和俩个整数\(x,y\),要求找到序号最靠前的数字\(d\),使得\(d\)满足 ...
- Codeforces Round #383 (Div. 2) 题解【ABCDE】
Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...
- Codeforces Round #113 (Div. 2)
Codeforces Round #113 (Div. 2) B. Polygons 题意 给一个\(N(N \le 10^5)\)个点的凸包 \(M(M \le 2 \cdot 10^4)\)次询问 ...
- Codeforces Round #373 (Div. 1)
Codeforces Round #373 (Div. 1) A. Efim and Strange Grade 题意 给一个长为\(n(n \le 2 \times 10^5)\)的小数,每次可以选 ...
随机推荐
- Java8-19-lambda 重构代码
通过本书的前七章,我们了解了Lambda和Stream API的强大威力. 你可能主要在新项目的代码中使用这些特性.如果你创建的是全新的Java项目,这是极好的时机,你可以轻装上阵,迅速地将新特性应用 ...
- Simplifying Conditional Expressions(简化条件表达式)
1.Decompose Conditional(分解条件表达式) 2.Consolidate Conditional Expressions(合并条件表达式) 3.Consolidate Duplic ...
- 初识SpringAOP
概述 AOP(Aspect Oriented Programming),即面向切面编程 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延伸,是软件系统开发中的一个 ...
- C++走向远洋——21(项目一,三角形,类)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:sanjiaoxing.cpp * 作者:常轩 * 微信公众号: ...
- 关于vue+element-ui项目的分页,返回默认显示第一页的问题解决
关于vue+element-ui项目的分页,返回默认显示第一页的问题解决 问题描述 当前页面如下: 然后点击页码跳到第3页,然后在第三页点击页面链接跳转到新的页面 然后在新页面点击返回按钮,返 ...
- 自动清理IIS log 日志脚本
系统环境:windows server 2012 r2 IIS 版本:IIS8 操作实现清理IIS log File 脚本如下: @echo off ::自动清理IIS Log file set lo ...
- LeetCode 32,并不Hard的难题,解法超级经典,带你领略动态规划的精彩
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天给大家分享的是LeetCode当中的32题,这是一道Hard难度的题.也是一道经典的字符串处理问题,在接下来的文章当中,我们会详细地解读 ...
- Aajx
# Ajax入门及基本开发 ## # Ajax的基本概念 >> 概念: 界面异步传输技术: 将几种技术和在一起进行开发的一种编程方式: >> 基本应用场景: > Goog ...
- 优雅的创建一个JavaScript库
这篇文章的目的是通过演示一个简单的例子来介绍在JS中实例化和定义一个库的正确方法,以优化他人编写或维护自己的JS库. 在我们深入之前,我做了两点假设: 你知道简单的JavaScript或C语言. 你不 ...
- BEM命名及其在sass中的实践
Why use it 近几年web应用的发展可以用疯狂来形容,依靠浏览器的支持以及前端技术和框架的发展,很多应用已经把大量的逻辑从服务器端迁移到了浏览器端,使用前后端分离技术,浏览器端与用户进行交互来 ...