ACM暑假集训日记 17.8.3
2017-08-03 21:37
204 查看
今天忙活了一天,也没写出几个题来,下午又有一场网络赛,前二十分钟A出了第一道题,后面的两个多小时,竟是一道都没有再做出来,被那题目描述困扰了半天,心情比较郁闷,晚上主要是看了一下两道网络赛的题目的题解,有一个用到了一个取尺法,看了半天感觉真的是挺巧妙地,感觉自己掌握的算法太少了,二期就算是学过的算法,用起来也不是多么熟练,以后还是要多做题,来锻炼自己运用算法的能力才行。
在这里再写一遍今天看的取尺法吧
用一个比较常见的例子来说明一下:
对于一个串 aabccccdfe 求出连续的(字母相同)最长的串;
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[100];
int i,j;
gets(a);
int len=strlen(a);
int ans=0;
for(i=0;i<len;i=j+1)
{
for(j=i;j+1<len&&a[i]==a[j+1];j++);
ans=max(ans,j-i+1);
}
cout<<ans<<endl;
}
然后对于今天的第三题
给一个串,问在有限次改变字母的情况下,能得到的最长连续长度是多少;
也可以用取尺法的思想;
把给定的长度设为k,看做是一个尺子,每次量取不能超过k;
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int mod=1e7+9;
int i,j,n,m,k,mx,x,y,l,r,b;
char c,s[2000];
int main()
{
scanf("%d",&n);
scanf("%s",s+1);
scanf("%d",&m);
for (i=1;i<=m;i++)
{
scanf("%d %c",&b,&c);
mx=0; l=1; k=0;
for (r=1;r<=n;r++)
{
if (s[r]!=c) k++;
while (k>b)
{
if (s[l]!=c) k--;
l++;
}
mx=max(mx,r-l+1);
}
cout<<mx<<endl;
}
}
取尺法一开始看了半天才看懂,不过掌握了一个挺实用的方法,也是一个不小的收获。
明天还是要继续做那几道搜索题= =,哎,真是有些头疼
在这里再写一遍今天看的取尺法吧
用一个比较常见的例子来说明一下:
对于一个串 aabccccdfe 求出连续的(字母相同)最长的串;
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[100];
int i,j;
gets(a);
int len=strlen(a);
int ans=0;
for(i=0;i<len;i=j+1)
{
for(j=i;j+1<len&&a[i]==a[j+1];j++);
ans=max(ans,j-i+1);
}
cout<<ans<<endl;
}
然后对于今天的第三题
给一个串,问在有限次改变字母的情况下,能得到的最长连续长度是多少;
也可以用取尺法的思想;
把给定的长度设为k,看做是一个尺子,每次量取不能超过k;
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int mod=1e7+9;
int i,j,n,m,k,mx,x,y,l,r,b;
char c,s[2000];
int main()
{
scanf("%d",&n);
scanf("%s",s+1);
scanf("%d",&m);
for (i=1;i<=m;i++)
{
scanf("%d %c",&b,&c);
mx=0; l=1; k=0;
for (r=1;r<=n;r++)
{
if (s[r]!=c) k++;
while (k>b)
{
if (s[l]!=c) k--;
l++;
}
mx=max(mx,r-l+1);
}
cout<<mx<<endl;
}
}
取尺法一开始看了半天才看懂,不过掌握了一个挺实用的方法,也是一个不小的收获。
明天还是要继续做那几道搜索题= =,哎,真是有些头疼
相关文章推荐
- ACM暑假集训日记 17.8.16 树状数组
- ACM暑假集训日记 17.8.2
- ACM暑假集训日记 17.8.14
- ACM暑假集训日记 17.7.31
- ACM暑假集训日记 17.8.18 树状数组
- ACM暑假集训日记 17.8.5
- ACM暑假集训日记 17.8.4
- ACM暑假集训日记 17.8.8
- ACM暑假集训日记 17.8.9 POJ 2774 字符串 Hash
- ACM暑假集训日记 17.8.7
- ACM暑假集训日记 17.8.10
- ACM暑假集训日记 17.8.1
- CSU-ACM暑假集训基础组训练赛(1) B - Problem B
- ACM集训日记-7月31日
- XYNU—ACM暑假集训第三次测试 贪心算法
- ACM集训日记-8月9日
- ACM集训日记-8月18日
- ACM暑假训练日记 17.8.21
- ZZUACM 2015 暑假集训 round 02
- CSU-ACM暑假集训基础组七夕专场 D - Problem D