一共有 n个数,第 i 个数是 xi
xi 可以取 [li , ri] 中任意的一个值。
设 ,求 S 种类数。
感觉二进制真是一个神奇的东西。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <string>
#include <bitset> using namespace std; bitset<>a[]; // a[i][j]表示累加完第i个数之后S为j是否可行,由于只涉及0和1所以考虑bitset优化瞎搞。 int main(){
int n;
scanf("%d", &n);
a[][] = ;
int l,r;
for(int i=; i<=n; i++){
scanf("%d%d", &l, &r);
a[i%].reset();
for(int j=l; j<=r; j++){
a[i%] |= a[(i%)^] << (j*j);
} }
printf("%lu\n",a[n%].count());
return ;
}