hdu 4737 A Bit Fun(TwoPointer)
題目鏈接;hdu 4737 A Bit Fun
題目大意:給定一個長度為n的序列,現在問說有多少對i,j滿足
f(i,j)
解題思路: Twopointer,將每個數拆分成二進制形式,然後維護連個指針l,r,保證f(l, r) < m,那麼當i = l時,對應的j就有r - l + 1種選擇方法。
#include
#include
#include
using namespace std;
typedef long long ll;
const int maxn = 100005;
int c[35], arr[maxn];
int add (int x, int v) {
int ret = 0;
for (int i = 0; i <= 30; i++) {
if (x&(1<= m)
s = add(arr[l++], -1);
ret += (i - l + 1);
}
return ret;
}
int main () {
int cas;
scanf("%d", &cas);
for (int kcas = 1; kcas <= cas; kcas++) {
ll ans = solve();
printf("Case #%d: %I64d\n", kcas, ans);
}
return 0;
}