题目描述
输入格式
输出格式
样例
数据范围与提示
题意 : 给你 n 个数字,每个数的范围是 a - b , 问将 n 个数字的平方和累加最终的和可能有多少个
思路分析 : 因为所有数据的范围均小于100,会发现最终最大的和是 1000000, 因此一个比较明显的暴力的做法就是 n^2*1000000
代码示例 :
#define ll long long
const int maxn = 1e6+5;
bitset<maxn>bs[2];
int n;
int a[105][2];
void solve(){
bs[0][0] = 1;
int k = 1;
for(int i = 1; i <= n; i++){
bs[k].reset();
for(int j = a[i][0]; j <= a[i][1]; j++){
bs[k] |= (bs[k^1] << (j*j));
}
k ^= 1;
}
k ^= 1;
int ans = 0;
for(int i = 0; i <= 1000000; i++) {
if (bs[k][i]) ans++;
}
printf("%d
", ans);
}
int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
cin >> n;
for(int i = 1; i <= n; i++) scanf("%d%d", &a[i][0], &a[i][1]);
solve();
return 0;
}