首页 > 其他分享 >abc288F - Integer Division

abc288F - Integer Division

时间:2023-09-11 11:22:06浏览次数:47  
标签:node Division ll abc288F Integer oplus include define

F - Integer Division
挺有意思的一道题,
贪心的做法就是排序之后,逐个加入,如果不能被之前的表示则加入
题解证明的话大概是这样

考虑第i个数选不选
首先加入前面选的数,如果能够表示当前的数,则必然不选

否则前面的数不能表示当前的数,假如我们不选\(p_i\)
假设最后得到一个合法序列,则必然能够表示\(p_i\)

\[x_1 \oplus x_2 \oplus x_3 ...\oplus x_m=p_i \]

\[p_i \oplus x_2 \oplus x_3 ...\oplus x_m=x_1 \]

且其中必定有一个数的位置大于i,不妨设为x1
那么根据上面的柿子,任意一个需要x1表示的数,都可以用上面的柿子替代,而\(p_i\)的代价要更小,所以应当直接选择。

#include<algorithm>
#include<cstdio>
#include<cstring>
#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 A puts("YES")
#define B puts("NO")

using namespace std;
typedef double db;
typedef long long ll;

const int N=1e5+5;
struct node{
	ll x,id;
};
node a[N];

ll n,ans;
bool vis[N];
ll c[N],r;
bool cmp(node a,node b){
	return a.x<b.x;
}
int main()
{
//	freopen("data.in","r",stdin);
	
	scanf("%lld",&n);
	n=(1<<n)-1;
	fo(i,1,n) {
		scanf("%lld",&a[i].x);
		a[i].id=i;
	}
	sort(a+1,a+n+1,cmp);
	
	r=1;
	c[1]=0;
	fo(i,1,n) {
		int z=a[i].id,y;
		if (vis[z]) continue;
		ans+=a[i].x;
		fo(j,1,r) {
			y=c[j]^z;
			vis[y]=1;
			c[j+r]=y;
		}
		r*=2;
	}
	printf("%lld",ans);
	
	
	return 0; 

}

 
    

标签:node,Division,ll,abc288F,Integer,oplus,include,define
From: https://www.cnblogs.com/ganking/p/17693043.html

相关文章

  • 关于使用new Integer还是Integer.valueOf的研究
    作者:fbysss前言:最近看到这样的说法:使用Integer.valueOf代替newInteger更有效率,原因是研究了Integer源码,发现有一个缓存可以利用。对此我也一探究竟。发现这其实与Java的自动装箱拆箱有关,直接使用Integeri=数值的方式即可。通过字节码研究是比较有效的方式。那我们来看看吧:-----......
  • PositiveSmallIntegerField、SmallIntegerField和IntegerField
    当您在Django中定义模型时,有几种不同的整数字段类型可供选择,包括PositiveSmallIntegerField、SmallIntegerField和IntegerField。以下是这三种整数字段类型的比较:PositiveSmallIntegerField(正小整数字段):用于存储小的非负整数值。范围:0到32767。适用于期望小的正值的字段,例......
  • 2个Integer比较不能用 ==
    举例子Integernum1=10;Integernum2=10;System.out.println(num1==num2);//trueIntegernum3=200;Integernum4=200;System.out.println(num3==num4);//falseIntegernum5=newInteger(10);Integernum6=newInteger(10);System.out.println(num......
  • Integer缓存机制随笔(清晰)
    总体主要分为两个方面①比较的是值一、基本数据类型与引用数据类型进行比较时,引用数据类型会进行拆箱,然后与基本数据类型进行值的比较举例:inti=12;Integerj=newInteger(12);i==j返回的是true二、引用数据类型与基本数据类型进行比较(equals方法),基本数......
  • AtomicInteger详解
    AtomicInteger定义AtomicInteger类是系统底层保护的int类型,通过对int类型的数据进行封装,提供执行方法的控制进行值的原子操作,但AtomicInteger≠Integer。AtomicInteger是一个提供原子操作的Integer类,通过线程安全的方式操作加减。AtomicInteger使用场景AtomicInteger提供原子操作......
  • Integer包装类型阅读
    以JDK11为例privatestaticclassIntegerCache{staticfinalintlow=-128;staticfinalinthigh;staticfinalIntegercache[];static{//highvaluemaybeconfiguredbypropertyinth=127;......
  • CF1444A Division
    思路首先特判特殊情况,若\(p_i\)本身不可被\(q_i\)整除,那么\(x_i\)就直接取\(p_i\)最大。否则的话,\(p_i=q_i\timesk\)。所以\(q\)的质因数,\(p\)都有,并且数量一定大于等于\(q\)的这个质因数的数量。那么如果\(x_i\)的某个质因数个数小于\(q_i\)的话,\(x_i\)就......
  • 【刷题笔记】29. Divide Two Integers
    题目Giventwointegers dividend and divisor,dividetwointegerswithoutusingmultiplication,divisionandmodoperator.Returnthequotientafterdividing dividend by divisor.Theintegerdivisionshouldtruncatetowardzero.Example1:Input:dividen......
  • 20230614 java.util.concurrent.atomic.AtomicInteger
    介绍java.util.concurrent.atomic.AtomicIntegerpublicclassAtomicIntegerextendsNumberimplementsjava.io.SerializableAPI构造器AtomicInteger()AtomicInteger(intinitialValue)设置初始值,默认是0public方法get,set原子操作不同步内存屏障,不能......
  • ios开发 int,NSInteger,NSUInteger,NSNumber
    分享一下,在工作工程中遇到的一些不留心的地方:1.当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备是32位的还是64位的。2.NSUInteger是无符号的,即没有负数,NSInteger是有符号的。3.有人说既然都有了NSInteger等......