Acwing第 14 场周赛完结

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Acwing第 14 场周赛完结相关的知识,希望对你有一定的参考价值。

3821. 区间选数【难度: 简单 / 知识点:思维】

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
	int t; cin>>t;
	while(t--)
	{
		int x,y,xx,yy; cin>>x>>y>>xx>>yy;
		int ans1=x,ans2=xx;
		while(1)
		{
		    if(ans1==ans2) ans2++;
		    else break;
		}
		cout<<ans1<<" "<<ans2<<endl;
	}
	return 0;
}

3822. 食堂排队【中 / 知识点: 模拟】

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int l,r,id;
}Node[1005];
bool cmp(node a,node b)
{
    if(a.l==b.l) return a.id<b.id;
    return a.l<b.l;
}
int t,n,st[1005];
int main(void)
{
    cin>>t; 
    while(t--)
    {
        cin>>n;
        memset(st,0,sizeof st);
        for(int i=0;i<n;i++) cin>>Node[i].l>>Node[i].r,Node[i].id=i+1;
        sort(Node,Node+n,cmp);
        int k=0;
        for(int i=1;i<=5000;i++)
        {
            if(Node[k].l<=i&&Node[k].r>=i)
            {
                st[Node[k].id]=i;
                k++;
                while(k<n&&Node[k].r<=i) k++;
            }
            if(k>=n) break;
        }
        for(int i=1;i<=n;i++) cout<<st[i]<<" ";
        cout<<endl;
    }
    return 0;
}

3823. 寻找字符串【难 / 知识点: KMP】


摘自: https://www.acwing.com/activity/content/code/content/1711095/

KMP 可以求出 s 的每个前缀的最长前后缀匹配长度 match
由于 t 在还需要在 s 中间出现,这个在中间出现的 t 同时也是 s 的某个前缀的前缀和后缀,
所以还是可以用 KMP 求
具体来说:
统计出 match[1..n-2] 中的最大值 mxM(下标从 0 开始)
若 t 在 s 中间存在,则 match[n-1], match[match[n-1]-1], ... 中必然能找到一个不超过 mxM 的数
这个数就对应着在 s 中间出现的 t

说白了就是找最大前缀的,最大前缀

#include<bits/stdc++.h> 
using namespace std;
const int N=1e6+10;
int n;
char s[N];
int ne[N];
bool st[N];
int main(void)
{
	int t; cin>>t;
	while(t--)
	{
		scanf("%s",s+1);
		n=strlen(s+1);
		for(int i=2,j=0;i<=n;i++)
		{
			while(j&&s[i]!=s[j+1]) j=ne[j];
			if(s[i]==s[j+1]) j++;
			ne[i]=j;
		}
		for(int i=0;i<=n;i++) st[i]=false;
		for(int i=1;i<n;i++) st[ne[i]]=true;
		int res=0;
		for(int i=ne[n];i;i=ne[i])
			if(st[i]) 
			{
				res=i;
				break;
			}
		if(!res) puts("not exist");
		else 
		{
			s[res+1]=0;
			printf("%s\\n",s+1);
		}
	}
	return 0;
}

以上是关于Acwing第 14 场周赛完结的主要内容,如果未能解决你的问题,请参考以下文章

Acwing第 31 场周赛完结

Acwing第 36 场周赛完结

Acwing第 56 场周赛完结

Acwing第 32 场周赛完结

Acwing第 59 场周赛完结

Acwing第 35 场周赛完结