Practice.
A. The Ultimate Square
题意
给定
思路
显然,当
时间复杂度:
对应AC代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 10;
signed main(){
ios::sync_with_stdio(false);
int t, n;
cin >> t;
while(t --){
cin >> n;
cout << n / 2 + n % 2 << '\n';
}
}
猜测即可
B. Diverse Substrings
题意
给定一串数字
对于子串中出现次数最多的数字的次数
思路
考虑到满足条件的子串长度最多只有
时间复杂度:
对应AC代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 20, inf = 0x3f3f3f3f, mod = 998244353;
int cnt[N];
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t --){
int n;
cin >> n;
string s;
cin >> s;
int ans = 0;
for(int i=0;i<n;i++){
memset(cnt, 0, sizeof cnt);
int dif = 0, maxx = 0;
for(int j=i;j<n&&j-i<100;j++){
if(cnt[s[j] - '0'] == 0) dif ++;
cnt[s[j] - '0'] ++;
maxx = max(maxx, cnt[s[j] - '0']);
if(maxx <= dif) ans ++;
}
}
cout << ans << '\n';
}
return 0;
}
太暴力了,虽然双指针确实不可行
C. Zero-Sum Prefixes
题意
给定数组
思路
考虑到修改一个元素,会影响到后面的元素的前缀和值,所以我们不妨直接从后面开始遍历。我们不妨从后往前找
时间复杂度:
对应AC代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 10, inf = 0x3f3f3f3f, mod = 998244353;
int a[N], sum[N];
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t --){
int n;
cin >> n;
sum[0] = 0;
for(int i=1;i<=n;i++) {
cin >> a[i];
sum[i] = sum[i - 1] + a[i];
}
int ans = 0;
map<int, int> mp;
for(int i=n;i>=1;i--){
mp[sum[i]] ++;
if(a[i] == 0){
int maxx = 0;
for(auto &e : mp)
maxx = max(maxx, e.second);
ans += maxx;
mp.clear();
}
}
cout << ans + mp[0]<< '\n';
}
return 0;
}
有点小贪心
- 本文链接 https://floating-ocean.github.io/blog_old/posts/1795773139/
- 版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!