C++ 使用``1ll<&书信电报;(N-1)``给长整型变量赋值
我看到的问题是:给你一个大小为N的数组A。如果元素Ai的值(Ai)大于或等于Ki,且Ki是包含元素Ai的数组A的子集总数,则称元素Ai带电 逻辑就是一个数字作为子集出现的次数是2^N-1倍。但在一些测试案例中,N为4000+。因此,2^N-1将远远超出任何变量类型所能容纳的范围,但在编辑中,作者使用了C++ 使用``1ll<&书信电报;(N-1)``给长整型变量赋值,c++,arrays,bitwise-operators,unsigned-long-long-int,C++,Arrays,Bitwise Operators,Unsigned Long Long Int,我看到的问题是:给你一个大小为N的数组A。如果元素Ai的值(Ai)大于或等于Ki,且Ki是包含元素Ai的数组A的子集总数,则称元素Ai带电 逻辑就是一个数字作为子集出现的次数是2^N-1倍。但在一些测试案例中,N为4000+。因此,2^N-1将远远超出任何变量类型所能容纳的范围,但在编辑中,作者使用了1ll N; 长arr[N]; 对于(int i=0;i>arr[i]; 如果(N>=64) 库特 但这是什么 1ll是一个安全气囊1是一个十进制文本,ll是一个整数后缀。后缀ll表示整数文本的类型
1ll N;
长arr[N];
对于(int i=0;i>arr[i];
如果(N>=64)
库特
但这是什么
1ll
是一个安全气囊1
是一个十进制文本,ll
是一个整数后缀。后缀ll
表示整数文本的类型是long-long-int
。1
表示文本的值是,1
它怎么能储存这么大的价值呢
我想你是在问线路:
long long val = (1ll << (N - 1));
这只是一个适合long int
类型的数字。long-long-int
类型至少有64位
如果没有ll
后缀,1
将具有int
类型。在int
类型小于64位(例如16位)的体系结构上,将发生未定义的行为。将变量左移一个大于或等于左操作数位长度的数字是未定义的行为,请参见示例
如果您询问有关线路的信息:
ans = (ans + arr[i] % M) % M;
它正在计算模和#define M 100000007
。通常做的作业/家庭作业是计算这个数字的和模,参见ex或。该算法计算模和1000000007,而不是整数,这就是为什么它能够存储在代码>长长变量.< /P>两个方面:首先,C++没有真正拥有,虽然有些编译器将它添加为非可移植的扩展。其次,请阅读当前平台上的long
是64位类型,因此1ll
1ll << 63 - 1 =
1ll << 62 =
0x4000000000000000
ans = (ans + arr[i] % M) % M;