首页 > 其他分享 >cf1415D. XOR-gun(思维)

cf1415D. XOR-gun(思维)

时间:2023-11-09 18:34:31浏览次数:35  
标签:XOR gun tot cf1415D 异或 ans return include define

https://codeforces.com/problemset/problem/1415/D

从高位到低位考虑,需要注意的是我们的最后一个数可能是有后面的数异或来的,需要记录异或了几次(下面会说)
如果当前这一位全都为0,直接下一位
如果当前这一位出现了至少4个1,那么答案为1。
如果只有一个1,那么显然应该直接把这个1丢掉,因为这个这个高位的1没办法去掉,所以无论如何都不会比前面的小
如果有3个1,我们可以分成两种情况,是否使用最后一个,假如使用最后一个,那么答案应该是,c[r]+1,c[r]表示最后一个是由多少个数异或来的
否则转化为2个1的情况
如果有2个1,那么简单枚举一下分割点在 r-1之前,还是r之前,然后分类一下就行。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<vector>
#include<set>
#include<queue>
#define A puts("YES")
#define B puts("NO")
#define fo(i,a,b) for (int (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (int (i)=(b);(i)>=(a);(i)--)
#define mk(x,y) make_pair((x),(y))
#define lc (o<<1)
#define rc (o<<1|1)
using namespace std;
//typedef __int128 i128;
typedef double db;
typedef long long ll;
const ll mo=1e9+7;
const int inf=1<<30;
const int N=1e5+5;
int n,a[N],b[50],ans,c[N];
void solve(int l,int r,int k){
	if (l+1>=r) return;
	int tot=0;

	fo(i,l,r) if (a[i]&b[k]) ++tot;
	
	if (!tot) {
		solve(l,r,k-1);
	}
	if (tot>3) {
		ans=1; return;
	}
	
	if (tot==1) {
		solve(l,r-1,k-1); return;
	}
	
	if (tot==3) {
		ans=min(ans, c[r-1]+c[r]+1);
		solve(l,r-1,k);
		return;
	}
	
	if (tot==2) {
		
		int x=a[r-1];
		fd(i,r-2,l) {
			x^=a[i];
			if (x>a[r]) {
				ans=min(ans, r-1-i+c[r]);
				break;
			}
		}
		
		x=0;
		fd(i,r-2,l) {
			x^=a[i];
			if (x>(a[r]^a[r-1])) {
				ans=min(ans, r-2-i+c[r]+c[r-1]+1);
				break;
			}
		}
	
		if (l+1==r) return;
		
		if ((a[r]^a[r-1])<a[r-2]) {
			solve(l,r-2,k-1);
		}
		else {
			c[r-1]+=c[r]+1;
			a[r-1]^=a[r];
			solve(l,r-1,k-1);
		}
	}
}
int main()
{
//	freopen("data.in","r",stdin);
//	freopen("ans.out","w",stdout);
	
	b[0]=1;
	fo(i,1,30) b[i]=b[i-1]*2;
	
	scanf("%d",&n);
	fo(i,1,n) scanf("%d",&a[i]);
	
	ans=inf;
	solve(1,n,30);
	
	if (ans==inf) puts("-1");
	else printf("%d",ans); 
	
	return 0;
} 

 
 

标签:XOR,gun,tot,cf1415D,异或,ans,return,include,define
From: https://www.cnblogs.com/ganking/p/17822508.html

相关文章

  • 【Django】使用gunicorn部署,找不到静态文件(admin,swagger...)
    先收集静态文件#settings.py里面需要指定收集的路径STATIC_ROOT与STATIC_URLpythonmanage.pycollectstatic添加识别代码#urls.pypath(r'^static/(?P<path>.*)$',serve,{'document_root':STATIC_ROOT}),......
  • Xor Master
    感觉这题也没那么难阿,但是就是不会做。注意到若记\(g'(x,S)=\min_{T\subseteqS}(x\oplus\operatorname{xor}(T))\),则\(g(x\oplusy,S)=g(x,S)\oplusg'(y,S)\)。证明这一结论并不困难,但是想到这个对我来说感觉还是有点太难了。于是我们用线段树维护\(g(\oplus_{j=1}^ia_j,S......
  • cf1446C. Xor Tree
    https://codeforces.com/problemset/problem/1446/C断断续续想了挺久的,还发现看错题了。首先一个显然的结论是不会成环,证明显然。突破口在于从高位往低位考虑,我们按照最高一位的值分成两类,一类是这一位为0,另一类为1,那么显然在我们不进行任何操作的时候,如果两个集合都不为空,那么......
  • cf1582F2. Korney Korneevich and XOR (hard version)(暴力优化)
    cf1582F2对于每种数可以维护一个列表v[x],表示到当前位置,最后一个数小于等于x,能够取到的值,对于当前的数ai,我们可以用v[ai]中的值x与ai异或,来更新v[ai+1],v[ai+2]后面的值。然后就是有两个优化,每次我们更新完后,都对v[a[i]]清空,因为只有两个相同数之间的数才对后面可能有贡献,前面的......
  • cf1709E. XOR Tree(启发式合并入门)
    cf1709E.XORTree贪心是显然的,关键是如何合并两棵子树的信息,可以采用启发式合并。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<map>#include<vector>#include<set>#include<ctime>#include<unordered_ma......
  • Educational Codeforces Round 157 (Rated for Div. 2) D. XOR Construction
    题目链接题意给你\(n-1\)个整数\(a_1,a_2,\dots,a_{n-1}\)。你的任务是构造一个数组\(b_1,b_2,\dots,b_n\),使得:从\(0\)到\(n-1\)的每个整数都在\(b\)中出现一次;对于从\(1\)到\(n-1\)的每个\(i\),\(b_i\oplusb_{i+1}=a_i\)(其中\(\oplus\)表示......
  • [ARC122D] XOR Game
    ProblemStatementThereare$2N$integerswrittenonablackboard.The$i$-thintegeris$A_i$.AliceandBobwillplayagameconsistingof$N$rounds.Ineachround,theydothefollowing:First,Alicechoosesanintegerontheblackboardanderasesit.......
  • XOR 加密
    1.代码#include<stdio.h>#include<stdlib.h>#include<time.h>intmain(){srand(time(NULL));inta,b,c,i,n;longlongd=0;printf("原文:");scanf("%d",&a);printf("密钥长度:");sc......
  • BLOXORZ
    1关密码:780464→↓↓→→↓→2关密码:290299↑→↓→→→→↑↑↓↓→→→→↑←↑3关密码:918660→↑→→→↑→↓←↑↑→↓←←↑→→→→↓↓↓→↑4关密码:520967↑←↑→→↑→→→→→→↓→↓↓↓↓↓→↑←←←←←←↓5关密码:028431......
  • golang之xorm简单使用
    gogetgithub.com/go-xorm/xormpackagemainimport("fmt"_"github.com/go-sql-driver/mysql""github.com/go-xorm/xorm")typePointInfostruct{Idint64`xorm:"pkautoincr"`Product......