首页 > 其他分享 >[CF1654F] Minimal String Xoration

[CF1654F] Minimal String Xoration

时间:2023-09-30 22:45:48浏览次数:41  
标签:p2 p1 const CF1654F int Xoration MAXN include Minimal

Minimal String Xoration
有点智慧但不是特别智慧反正是我达不到的智慧。
打表可以看出长度为 \(2^x\) 的 \(i\oplus k\) 出现次数为 \(2^{n-k}\)。
进一步发现,设 \(f(k,x)\) 当前选取 k 时,数列前 \(2^k\) 的下标。
则 \(f(k,x)=f(k,x-1)+f(k\oplus{2^{x-1}},x-1)\)
因为对于 \(p\in[0,2^{x-1})\),\(p\oplus k=(p+2^{x-1})\oplus(k+2^{x-1})\)
所以就可以倍增求出每个 k 对应的序列,使用 Hash 就可以直接倍增做了。

#include<map>
#include<set>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> 
using namespace std;
#define ull unsigned long long
const int N=20;
const int MAXN=262146;
const ull bas1=20061103;
const ull bas2=1145141;
int n,m,a[MAXN],m1[MAXN],m2[MAXN];
string s;
ull p1[MAXN][N],p2[MAXN][N];
int check(int x,int y){
	if(p1[x][n]==p1[y][n]&&p2[x][n]==p2[y][n]) return 0;
	for(int i=n-1;~i;i--){
		if(p1[x][i]==p1[y][i]&&p2[x][i]==p2[y][i]) x^=(1<<i),y^=(1<<i);
	}
	return a[x]<a[y]?-1:1;
}
int main(){
	cin>>n;m=1<<n;
	m1[0]=1;m2[0]=1;
	for(int i=1;i<m;i++) m1[i]=m1[i-1]*bas1,m2[i]=m2[i-1]*bas2;
	cin>>s;
	for(int i=0;i<m;i++) a[i]=s[i]-'a'+1;
	for(int i=0;i<m;i++) p1[i][0]=p2[i][0]=a[i];
	for(int j=1;j<=n;j++){
		for(int i=0;i<m;i++){
			p1[i][j]=p1[i][j-1]*m1[1<<(j-1)]+p1[i^(1<<(j-1))][j-1];
			p2[i][j]=p2[i][j-1]*m2[1<<(j-1)]+p2[i^(1<<(j-1))][j-1];
		}
	}
	int res=0;
	for(int i=1;i<m;i++){
		if(check(i,res)==-1) res=i;
	}
	for(int i=0;i<m;i++) cout<<s[i^res];
	return 0;
}

标签:p2,p1,const,CF1654F,int,Xoration,MAXN,include,Minimal
From: https://www.cnblogs.com/StranGePants/p/17738327.html

相关文章

  • A Minimal Rust Kernel
    Feb10,2018Inthispost,wecreateaminimal64-bitRustkernelforthex86architecture.Webuilduponthe freestandingRustbinary fromthepreviousposttocreateabootablediskimagethatprintssomethingtothescreen.在这篇文章中,我们为x86架构创......
  • Fox and Minimal path 题解
    FoxandMinimalpath题目大意构造一张无向图,使得从\(1\)到\(2\)的最短路数量为\(k\)。思路分析我们首先可以发现当\(k=2^t\)时的构造方式:其中只有\(O(\logk)\)个点。当\(k\not=2^t\)时,我们可以将\(k\)二进制拆分,对于每一个二进制位重复上述操作,就可以得......
  • CF1491B Minimal Cost 题解
    调了两个多小时终于过了,交一发题解。题目分析如果你认真读题就会发现,这道题看似有很多种情况,但障碍的移动方式其实只有几种。如果当所有障碍物都在一列时,可以将某一个障碍水平移动一格,再垂直移动一格或者水平移动两格,那么答案就是v+min(u,v)。当有通路时,则无需移动,答案就是......
  • 使用ASP.NET Core Minimal API和MailKit发送电子邮件
    步骤1:创建新项目通过以下命令在终端中创建一个新的ASP.NETCoreWebAPI项目:dotnetnewwebapi-oSendingEmail由于我们正在使用MinimalAPIs,因此删除不必要的Controller文件夹和WeatherForecast类。步骤2:定义电子邮件数据传输对象(DTO)为了将数据从我们的API传递到邮件服务......
  • vmware安装minimal centos报错/etc/rc5.d/s99local : line:25 : eject : command not
    1.vmware安装minimalcentos报错/etc/rc5.d/s99local:line:25:eject:commandnotfoundhttp://www.centoscn.com/image-text/install/2015/1130/6459.html 2.vmwareworkstation上安装centoshttp://www.linuxidc.com/Linux/2016-05/131701.htm 3.虚拟机可以ping通主机和8.8......
  • CF 1175E Minimal Segment Cover[RMQ]
    题目链接:http://codeforces.com/problemset/problem/1175/E 解题思路:预处理出每个点用一次可以到达最远的距离。那么某个点用两次可以到达最远距离就是他用一次到达最远距离的地方用一次到达的最远距离,所以我们可以去倍增。#include<bits/stdc++.h>usingnamespacestd;typed......
  • MASA MinimalAPI源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口
    源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口1.ServiceBase1.AutoMapRoute源码如下:AutoMapRoute自动创建map路由,MinimalAPI会根据service中的方法,创建对应的api接口。比如上文的一个方法:publicasyncTask<WeatherForecast[]>PostWeather(){re......
  • MASAMinimalAPI:创建MinimalAPI项目
    项目准备1.创建项目,选择webapi。取消勾选使用控制器。创建minimalApi项目2.创建成功后MinimalAPI的接口直接写在program.cs中3.引入nuget包:Masa.Contrib.Service.MinimalAPIsMinimalAPI改造1.在program.cs中加入以下内容将原有的varapp=builder.Build();换成var......
  • MasaFramework之MinimalApi替换传统api
    MasaFramework之MinimalApi替换传统apimd文件复制样式可能丢失,原文地址:https://www.firstsaofan.top/archives/net6-huo-zhe-net7-shi-yong-masaframework-zhi-minimalapi-ti-huan-chuan-tong-api1.新建一个使用了MinimalApi的webapi的net6或者net7的项目,选择如图: 2.取消勾......
  • XI Samara Regional Intercollegiate Programming Contest Problem B. Minimal Are
    Youaregivenastrictlyconvexpolygon.Findtheminimalpossibleareaofnon-degeneratetrianglewhoseverticesaretheverticesofthepolygon.InputThefirstlinecontainsasingleintegern(3≤n≤200000)—thenumberofpolygonvertices.Eac......