首页 > 其他分享 >ARC182B |{floor(A_i/2^k)}| 题解

ARC182B |{floor(A_i/2^k)}| 题解

时间:2024-08-13 09:30:47浏览次数:14  
标签:右移 ... floor int 题解 ARC182B

ARC182B |{floor(A_i/2^k)}| 题解

题目大意

定义一个长度为 \(N\) 的序列 \(A\) 的分数为 能被表示成 \(\lfloor {A_i\over2^k}\rfloor\) 的数的个数,其中 \(i=1,2,\dots,N\),\(k\) 为任意自然数。

给定 \(N,K\),求长度为 \(N\) 且元素大小都在 \(2^K-1\) 内的所有序列的分数的最大值,输出任意拥有最大分数的序列。

Solve

除以 \(k\) 下取整相当于二进制下右移 \(k\) 位,所以按位考虑。

显然有效位数越多越好,因为有效位数多的右移 \(k\) 位得到的数也更多。比如 \((101010)_2\) 右移得到的数是包含 \((01010)_2\) 能得到的数的。

所以序列中的数二进制下第 \(K-1\) 位一定是 \(1\),接下来我们考虑怎么构造能使右移得到的不同的数更多。这里有一种构造方法:

1 0 0 0 ...
1 1 0 0 ...
1 0 1 0 ...
1 1 1 0 ...
1 0 0 1 ...
1 1 0 1 ...
1 0 1 1 ...
1 0 1 1 ...
1 0 0 0 ...
1 1 0 0 ...
1 0 1 0 ...
1 1 1 0 ...
...

即二进制位尽量交错着填,保证每一种情况都被考虑,比如第 \(K-4\) 位上填 \(0\) 的数中,第 \(K-2,K-3\) 位上填 \(1\) 或 \(0\) 的所有 \(4\) 种情况都被考虑到。

如此,我们能保证右移任意 \(k\) 位得到的数的个数都是卡满的。

Code

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
	short f=1;
	int x=0;
	char c=getchar();
	while(c<'0'||c>'9')	{if(c=='-')	f=-1;c=getchar();}
	while(c>='0'&&c<='9')	x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x*f;
}
const int N=1e5+10;
int T,n,m,a[N];
signed main()
{
	T=read();
	while(T--)
	{
		n=read();m=read();
		for(int i=1;i<=n;i=-~i)	a[i]=1<<m-1;
		for(int i=m-2;i>=0;i--)
		{
			bool f=0;
			for(int j=1;j<=n;j+=(1<<m-2-i),f^=1)
				for(int k=j;k<=min(j+(1<<m-2-i)-1,n);k=-~k)
					a[k]+=f<<i;
		}
		for(int i=1;i<=n;i=-~i)	printf("%d ",a[i]);
		putchar('\n');
	}
	return 0;
}

标签:右移,...,floor,int,题解,ARC182B
From: https://www.cnblogs.com/sorato/p/18354700

相关文章

  • 【题解】 [USACO 2007 FEB] Cow Party S
    题目描述题目大意给定一个有向图,以及一个顶点。求其他所有点到给定点,再从给定点回到各自起始点的最短路中的最大值。思路本题主要考查:对单源最短路算法的熟练运用。最短路总共分为2段:其他所有点到给定点、给定点回到各自起始点。首先求第一段:可以在原图的基础上建一个反向图......
  • 洛谷 P4305 不重复数字——题解
    洛谷P4305题解传送锚点摸鱼环节[JLOI2011]不重复数字题目描述给定\(n\)个数,要求把其中重复的去掉,只保留第一次出现的数。输入格式本题有多组数据。第一行一个整数\(T\),表示数据组数。对于每组数据:第一行一个整数\(n\)。第二行\(n\)个数,表示给定的数。输出格......
  • 【题解】 热浪
    题目描述【题目描述】德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品。FarmerJohn此时以先天下之忧而忧,后天下之乐而乐的精神,身先士卒地承担起向德克萨斯运送大量的营养冰凉的牛......
  • [题解 hduoj-7522] 2024HDU 暑假多校7 - cats 的最小生成树
    原题链接题意有一个有重边的无向图,每次找到它的最小生成树,并删除生成树的边,直到不存在最小生成树,问被每条边在第几次被删除.思路考虑用类似Kruskal算法,但是是遍历一遍所有边,同时处理出来所有的生成树.具体这样做:如Kruskal一样,把所有边按边权排序,......
  • GBNC 题解
    GBNC题解这可比平时做的红题难吧。题目以思维为主,和CCF的趋势有点挂钩。题目实际难度:橙-,橙,橙,黄。不知道从哪听到的消息,说你们的信息思维都特别好,所以就没有大红题了。T1思路这道题我们能用模拟来写。我们可以将这整个询问分为\(n\)个小询问。每次询问我们用一个整形\(......
  • [题解]P3966 [TJOI2013] 单词
    P3966[TJOI2013]单词用\(p[i]\)来表示经过节点\(i\)的字符串个数。那么节点\(u\)的答案就是fail树上,以\(u\)为根的子树的\(p\)之和。由于我们已经计算了\(p[i]\),所以字符串\(i\)作为模式串本身&模式串前缀的情况已经考虑了。还需考虑\(i\)作为模式串后缀的情况,而只有fail树上......
  • 【题解】 小狗
    题目描述【题目描述】小Q是个爱狗狂魔,他饲养了N(N<=2000)条中华田园犬狗和M(M<=2000)条秋田犬。并且给每条狗取了一个英文名字,例如:Sally,Sussan,Lysa等,为了方便起见,小Q登记时只会登记首字母,例如Sally、Sussan、Lysa只会登记为S、S、L。现在中华田园犬......
  • 题解:NOIP2023 天天爱打卡
    题解:NOIP2023天天爱打卡标签:线段树优化dp先考虑一个朴素的dp,\(f[i]\)表示前\(i\)天,第\(i\)天必打卡能得到的最大能量,有转移:\[f[i]=\max_{j=i-k+1}^{i}(val(j,i)-d\times(i-j+1)+\max_{p=1}^{j-2}f[p])\]\(val(j,i)\)表示第\(j\simi\)天完成的挑战.......
  • [题解]P2292 [HNOI2004] L 语言
    P2292[HNOI2004]L语言注:下文中,\(s[l\simr]\)表示截取字符串\(s\)的第\(l\)个字符到第\(r\)个字符。文字描述的字符串下标从\(1\)开始,但代码实现从\(0\)开始。我们建出AC自动机后,有一个比较暴力的思路。我么用\(f[i]\)表示待查找字符串\(t\)的长度为\(i\)前缀是否满足......
  • AtCoder ABC 366题解
    前言本文部分思路来自于网络,仅供参考。A-Election2题目大意给定两个市长候选人的票数,求结果是否已经确定。解题思路如果剩下的人全部投票给票少的人票少的人也不能赢,则结果就已经确定了。code#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,t,......