01/10/2018, 08:35
Hỏi về kí hiệu <<
#include <bits/stdc++.h>
#define maxd 1<<10
using namespace std;
vector<int> x;
vector<int>::iterator it;
int k;
long d[maxd];
long a[11];
long long dem;
void check(vector <int> x) {
long sum=0;
for( it = x.begin()+1; it < x.end(); it++ ) {
if (*it ==1 ) sum += a[it-x.begin()];
}
if (sum <= (1 << k)) d[sum]++;
}
void ChinhHopLap(long i) {
for (long j=0; j<=1; j++) {
x[i]=j;
if (i==k) check(x);
else ChinhHopLap(i+1);
}
}
int main() {
std::cin >> k ;
for (int i=1; i<=k; i++) std::cin >> a[i];
x.resize(k+1, -1);
x[0]=0;
ChinhHopLap(1);
for (long i=0; i<maxd; i++)
if (d[i]==0) {
std::cout << i;
return 0;
}
}
Mọi người có thể giải thích cho em kí hiệu <<
trong chỗ 1 << k
là gì và có tác dụng gì không ạ. Em cảm ơn.
Bài liên quan
Giải theo số học: 1*2^k đó bạn
Mà gán khơi khơi [quote=“masteryolo24, post:1, topic:42667”]
for (int i=1; i<=k; i++) std::cin >> a[i];
[/quote]
chắc ko vào đâu lí do là chưa
resize()
.vậy tức là
1 << k = 1 * 2^k
đúng không ạlà sao ạ. Anh giải thích cho em rõ được không ạ
Đấy là phép dịch bit đó bạn. 1 << k
Ví dụ 1 << 3 tức là dịch số 1 sang trái 3 lần
0001 thành 1000 = 1.2^3 + 0.2^2+0.2^1+0.2^0
Đó là phép toán dịch bit.
<< là dịch bit sang trái.
'>> là dịch bit sang phải.
A>>=x, A<<=x là dịch bit của A sang trái hoặc phải bao nhiêu bit.
Ví dụ: