記憶體限制:256 MiB時間限制:1000 ms標準輸入輸出 題目類型:傳統評測方式:文本比較 上傳者: nzhtl1477 記憶體限制:256 MiB時間限制:1000 ms標準輸入輸出 題目類型:傳統評測方式:文本比較 上傳者: nzhtl1477 提交提交記錄統計討論測試數據 題目描述 一共有 ...
記憶體限制:256 MiB時間限制:1000 ms標準輸入輸出 題目類型:傳統評測方式:文本比較 上傳者: nzhtl1477 提交提交記錄統計討論測試數據
題目描述
一共有 nnn個數,第 iii 個數 xix_ixi 可以取 [ai,bi][a_i , b_i][ai,bi] 中任意值。
設 S=∑xi2S = \sum{{x_i}^2}S=∑xi2,求 SSS 種類數。
輸入格式
第一行一個數 nnn。
然後 nnn 行,每行兩個數表示 ai,bia_i,b_iai,bi。
輸出格式
輸出一行一個數表示答案。
樣例
樣例輸入
5
1 2
2 3
3 4
4 5
5 6
樣例輸出
26
數據範圍與提示
1≤n,ai,bi≤1001 \le n , a_i , b_i \le 1001≤n,ai,bi≤100
臭名昭著的巧合
考場上只想到了暴力,完全沒想到bitset優化qwq。
考慮到$\sum_1^{100*100} * 100 = 1e6$
然後開個bitset每次暴力合併就行了
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<bitset> #define rg register using namespace std; const int MAXN = 1e6 + 10001, mod = 19650827; inline int read() { char c = getchar();int x = 0,f = 1; while(c < '0' || c > '9'){if(c == '-')f = -1;c = getchar();} while(c >= '0' && c <= '9'){x = x * 10 + c - '0',c = getchar();} return x * f; } int N; bitset<MAXN> pre, nxt; int main() { N = read();N--; int l = read(), r = read(); for(rg int i = l; i <= r; i++) pre[i * i] = 1; for(rg int i = 1; i <= N; i++) { int l = read(), r = read(); nxt.reset(); for(rg int k = l; k <= r; k++) nxt |= pre << (k * k); pre = nxt; } printf("%d", nxt.count()); return 0; }