1.字符串权值:
模拟就行了,他咋说的,你就咋做。
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
typedef long long LL;
string str;
int sum;
int main()
{
cin>>str;
for(int i =0;i<7;i++)
{
if(str[i] == 'A')sum += 1;
else if(str[i]== '1') sum +=10;
else sum += str[i] - '0';
}
cout<<sum<<endl;
return 0;
}
2.k显性字符
我们先来想这样一个事情,这是给定的字符串
我们要找到一个长度k,使得长度>=k 的子串都包含c。
我们可以找到的是假设一个字符 c ,字符 c 间一个最大的长度是 t 。也就是说,当 k > t 的时候,一定存在字符 c 是该字符串的 k 显性字符,且 k = t + 1;
当然,这个为啥 k = t + 1,这个应该没啥问题,但是就是有人犟。
上证明:
如果 k != t + 1; 且 k > t ,则 k > t +1;
那我们就一定可以找到 一个长度 > t + 1 的子串,使得不包含 字符 c,可是我们找到的是
(1)我们枚举字符c,共26种情况,时间复杂度:O(26 * n);
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010, M = 26;
string str;
int main()
{
cin>>str;
int n = str.size();
int ans = N;
for(char i = 'a'; i<='z'; i++)
{
int last = 0,maxdis = 0;
for(int j = 0; j < n; j++)
{
if(str[j] == i)
{
maxdis = max(maxdis,j + 1 - last);
last = j + 1;
}
}
maxdis = max(maxdis,n + 1 - last);
ans = min(maxdis,ans);
}
cout<<ans<<endl;
return 0;
}
(2)Y总讲的用空间换时间,时间复杂度 O(n);
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010, M = 26;
string str;
int last[26],d[26];
int main()
{
cin>>str;
int n = str.size();
int ans = N;
for(int j = 0; j < n; j++)
{
int x = str[j] - 'a';
d[x] = max(d[x],j + 1 - last[x]);
last[x] = j + 1;
}
for(int i =0;i<26;i++)
{
d[i] = max(d[i],n + 1 - last[i]);
}
for(int i =0;i<26;i++)
{
ans = min(ans,d[i]);
}
cout<<ans<<endl;
return 0;
}
3.01串
DP杀我,我根本就没往DP上去想,感觉DP做的题太少了,而且DP好难啊,而且这个题还用到了前缀和,好巧不巧,我想到了前缀和,没想到DP。
用一手闫式DP分析法
然后我们就得到了这个状态转移方程:
#include<bits/stdc++.h>
using namespace std;
const int N = 100010,mod = 1e9 + 7;
typedef long long LL;
int T,k;
int f[N];
int s[N];
int main()
{
scanf("%d%d",&T,&k);
f[0] = 1;//定义边界
for(int i = 1;i < N;i ++)
{
f[i] = f[i-1];
if(i >= k) f[i] = (f[i] + f[i - k]) % mod;
}
for(int i =1;i<N;i++) s[i] = (s[i-1] + f[i]) % mod;
while(T --)
{
int l,r,ans = 0;
scanf("%d%d",&l,&r);
ans = (s[r] - s[l-1] + mod)% mod;
printf("%d\n",ans);
}
return 0;
}
DP杀我啊