首页 > 其他分享 >洛谷 P10512 序列合并

洛谷 P10512 序列合并

时间:2024-05-20 10:51:38浏览次数:25  
标签:洛谷 int P10512 合并 二进制 序列 考虑 now nt

哭死,比赛的时候完全想歪了,想的是考虑一次合并能造成多大的贡献,按照贡献排序然后合并。这样做只能考虑局部造成的贡献,然而最后算的时候要考虑整体,所以并不是很对。

正着想没有思路就可以倒着想,考虑枚举答案。

合并k次,意味着最后是n-k个数。

经典从二进制高位到低位考虑,考虑这一位(假设为第i位)能否出现在答案里?那我们就让原序列最后合并完后的数每个数第i位都是1,在此要求下让合并完的数尽可能的多(只要最后留下的数的个数大于等于n-k就可以,然后我们就能接着考虑二进制下一位)。怎们考虑让合并完的数尽可能的多?我们设nt[now][j]表示第now个数及以后最早出现“二进制第j位为1”的位置在哪,就很好让最后合并完的数尽可能多了。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,ans;
const int N=200010;
int a[N],nt[N][32],las[233];
int pan(int c)
{
	int cnt=0,now=1;
	while(now<=n)
	{
		int maxx=0;
		for(int j=1;j<=31;++j)
			if((c>>(j-1))&1)
			{
				maxx=max(maxx,nt[now][j]);
			}
		//cout<<" -> "<<now<<" "<<maxx<<endl;
		if(maxx<=n)++cnt,now=maxx+1;
		else break;
	}
	return cnt>=k;
}
signed main()
{
	cin>>n>>k;k=n-k;
	for(int i=1;i<=n;++i)scanf("%lld",&a[i]);
	for(int i=1;i<=31;++i)las[i]=n+1;
	for(int i=n;i>=1;--i)
	{
		for(int j=1;j<=31;++j)
			if((a[i]>>(j-1))&1)las[j]=i;
		for(int j=1;j<=31;++j)nt[i][j]=las[j];//,cout<<"-- "<<i<<" "<<j<<" "<<nt[i][j]<<endl;
	}
	for(int i=31;i>=1;--i)
	{
		ans|=(1ll<<(i-1));
		if(pan(ans)==0)ans^=(1ll<<(i-1));
	}
	cout<<ans;
	return 0;
} 
/*
5 2
2 1 2 3 1


20 7
46734244 7155744 419668125 71371568 686112 90931877 235739656 174560001 73941537 157614741 557848156 172496544 449681808 258216481 628704657 317530505 436971280 329908401 168398248 163412001

4194304
*/

标签:洛谷,int,P10512,合并,二进制,序列,考虑,now,nt
From: https://www.cnblogs.com/wljss/p/18201431

相关文章

  • 如何正确实现一个自定义可序列化的 Exception
    最近在公司的项目中,编写了几个自定义的Exception类。提交PR的时候,sonarqube提示这几个自定义异常不符合ISerializablepatten.花了点时间稍微研究了一下,把这个问题解了。今天在此记录一下,可能大家都会帮助到大家。自定义异常#编写一个自定义的异常,继承自Exception,其中......
  • redis存储之序列化问题
    1.问题描述:在SpringBoot集成Redis过程中,添加进redisf的内容如下2.出现这种情况的原因(1) 键和值都是通过Spring提供的Serializer序列化到数据库的(2) RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer3.解......
  • Solution -「洛谷 P8477」 「GLR-R3」春分 下界证明?!
      前情提要:在「洛谷P8477」「GLR-R3」春分中,我们给出了\(\frac{7}{6}n\pm\mathcalO(1)\)的解法,但没能给出相关的下界证明。现在我们尝试给出一个未完全完成的下界证明。  为方便描述,我们综合链接中题意和某个“通俗”的题意,称隔板为“板”,称溶液为“人”。  这个......
  • Weblogic T3反序列化漏洞(CVE-2018-2628)
    目录前言T3协议概述漏洞复现修复方案前言WebLogicServer是一个企业级的应用服务器,由Oracle公司开发,支持完整的JavaEE规范,包括EJB、JSP、Servlet、JMS等,适合大型分布式应用和高负载场景。T3协议概述T3协议(Two-TierTCP/IPProtocol),是WebLogic中的一种专有协议,建立在TCP/IP协......
  • 300. 最长递增子序列
    给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是[2,3,7,1......
  • [lnsyoj281/luoguP2023/AHOI2009]维护序列
    题意原题链接给定序列\(a\),要求维护区间加,区间乘,区间查询三种操作sol显然线段树,事实上,这是一道板子题(luoguP3373),但由于蒟蒻实在是太蒻了,并没有打过这道题。区间加如果我们将区间里的每一个元素都插入线段树做一次修改操作,那么一次修改操作的时间复杂度为\(O(n\logn)\),此时......
  • Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用|附代码数据
    原文链接:http://tecdat.cn/?p=24407最近我们被客户要求撰写关于金融时间序列模型的研究报告,包括一些图形和统计输出。这篇文章讨论了自回归综合移动平均模型(ARIMA)和自回归条件异方差模型(GARCH)及其在股票市场预测中的应用 ( 点击文末“阅读原文”获取完整代码数据******......
  • 使用Spring HttpExchange时数据对象遇LocalDateTime字段类型json反序列化失败的解决方
    方法:重写MessageConverter,使得yyyy-MM-ddHH:mm:ss的字符串能反序列化到LocalDateTime类型上。@ConfigurationpublicclassHttpClientConfig{@Value("${service.host}")privateStringhost;@BeanRestClient.BuilderrestClientBuilder(){r......
  • 「杂题乱刷」洛谷 P10467
    题目链接P10467[CCC2007]SnowflakeSnowSnowflakes解题思路字符串哈希板子题。思路就是我们给每个数列的所有排列都哈希一个值,然后判断是否有不同的数列的哈希值相同,如果有,就输出Twinsnowflakesfound.,否则就输出Notwosnowflakesarealike.。参考代码这里使用双哈......
  • 「杂题乱刷」洛谷 P10468 兔子与兔子
    题目链接P10468兔子与兔子解题思路字符串哈希板子题。思路就是我们给字符串的每一个前缀和后缀都用一种特定的方式使其变为一个值,比如取一个乘数和模数,可以证明这样出错的概率极低。参考代码这里使用自然溢出三哈希。#include<bits/stdc++.h>usingnamespacestd;#defin......