4 条题解
-
1
套滑动窗口板子就行,注意结果要开long long
#include<bits/stdc++.h> using namespace std; int cnt[200]; string s; int k; int main() { cin >> s>>k; s = " " + s; int n = s.size() - 1; //直接滑动窗口 memset(cnt, 0, sizeof(cnt)); int l = 1, r = 0; long long ans = 0;//记录满足字串的数量,要开long long for (; l <= n;l++) { while(r<n) //每一个l情况下,找到最长子串就能找到,对应的字串数量 { r++; cnt[s[r]]++;//记录字符出现次数 if(cnt[s[r]]>k) { cnt[s[r]]--; //值回退优先于,r回退 r--; break; } } ans += r - l + 1;//对应的所以字串数量 cnt[s[l]]--; } cout << ans << endl; return 0; } -
0
#include<bits/stdc++.h> using namespace std; #define int long long /* n个宝藏 有重量 问最大能拿多少 背包唯一限制为 mx-mi<=k 很明显先排序:然后双端指针不断中间逼近找到第一个满足为止 直接累加或者前缀和都先 但是我还有一个小优化 因为排序了 所以我想到二分 对于尾指针进行枚举从n-- 对于首指针可以二分 二分的判断是 mx-mi<=k 即mi>=mx-k */ const int N=1005; int a[N],s[N]; int n,k; int ans; signed main() { std::ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n); //注意前缀和的位置于sort for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i]; //二分+双指针优化---mx-mi<=k-----mi>=mx-k-右1 int i=1; for(int j=n;j>i;j--)//枚举第后者 { int l=1,r=j-1; while(l<r) { int mid=l+r>>1; if(a[mid]>=a[j]-k) r=mid; else l=mid+1; } if(a[j]-a[l]<=k) { i=l; ans=max(ans,s[j]-s[l-1]); } } cout<<ans<<"\n"; return 0; }
-
0
#include<bits/stdc++.h> using namespace std; typedef long long ll ; ll T=1;const ll N=1e5+5; ll a[N];ll n;ll ans;ll x,y;string s; map<char,ll>vis; bool check(ll l,ll r){ for(ll i=l;i<=r;++i){ if(vis[s[i]]>x)return 0; }return 1; } ll cnt; void solve(){ cin>>s;n=s.size(); s=" "+s; cin >>x; ll l=1;ll r=1; while(r<=n){ vis[s[r]]++; while(vis[s[r]]>x){ vis[s[l]]--; l++; } cnt+=r-l+1; r++; } cout<<cnt; } int main(){ while(T--)solve(); return 0; } -
0
import sys input = lambda:sys.stdin.readline().strip() s = input() k = int(input()) n = len(s) left = 0 from collections import defaultdict count = defaultdict(int) res = 0 for right in range(n): count[s[right]] += 1 while count[s[right]] > k: count[s[left]] -= 1 left += 1 res += (right - left + 1) print(res)
- 1
信息
- ID
- 679
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 208
- 已通过
- 86
- 上传者