5 条题解
-
0
直接前缀和预处理后以k倍数的区间长度进行前缀和查询即可,手算运行次数n^2 / k - 26 * n, 最坏情况运行7e9,一个n^2的算法,数据没有卡,极限时间900ms,可以直接过
const int N = 1e5 + 10; int sum[26][N]; void solve() { int n,k; cin >> n >> k; string s; cin >> s; s = " " + s; for(int j = 1; j <= n ; j ++ ) { for(int i = 0 ; i < 26 ; i ++ ){ sum[i][j] = sum[i][j - 1]; } sum[s[j] - 'a'][j] ++ ; } ll ans = 0; for(int i = k ; i <= n; i += k ) { for(int x = i ; x <= n ; x ++ ){ bool ok = false; for(int j = 0 ; j < 26 ; j ++ ) { if(sum[j][x] - sum[j][x - i] == 0)continue; if(sum[j][x] - sum[j][x - i] != k) { // cout << (char)(j + 'a') << ' ' << x << ' ' << x - i<< endl; // cout << sum[j][x] << ' ' << sum[j][x - i] << endl; // ans ++ ; ok = true; } } if(!ok) ans ++ ; } } cout << ans; }
信息
- ID
- 170
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 749
- 已通过
- 181
- 上传者