Acwing第 51 场周赛【完结】

https://www.acwing.com/activity/content/1818/

4419. 上车【签到】

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
    
     
    int n; cin>>n;
    int cnt=0;
    for(int i=1;i<=n;i++)
    {
    
    
        int s1,s2; cin>>s1>>s2;
        if(s1+2<=s2) cnt++;
    }
    cout<<cnt;
	return 0;
}

4420. 连通分量【并查集】

在这里插入图片描述

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
const int M=1e6+10;
int n,m,t;
char a[N][N];
int cnt[M],p[M];
int dx[4]={
    
    -1,0,0,1};
int dy[4]={
    
    0,-1,1,0};
int find(int x)
{
    
    
    if(x!=p[x]) p[x]=find(p[x]);
    return p[x];
}
void solve(int x,int y)
{
    
    
    for(int i=0;i<4;i++)
    {
    
    
        int tempx=x+dx[i],tempy=y+dy[i];
        if(tempx<0||tempx>=n||tempy<=0||tempy>m) continue;
        if(a[tempx][tempy]=='*') continue;
        int id1=x*m+y,id2=tempx*m+tempy;
        if(find(id1)==find(id2)) continue;
        cnt[find(id1)]+=cnt[find(id2)];
        p[find(id2)]=find(id1);
    }
}
int main(void)
{
    
     
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    cin>>n>>m;
    for(int i=0;i<n;i++)
        for(int j=1;j<=m;j++) cin>>a[i][j];
    for(int i=1;i<=n*m;i++) p[i]=i,cnt[i]=1;
    for(int i=0;i<n;i++)
        for(int j=1;j<=m;j++)
            if(a[i][j]=='.') solve(i,j);
    for(int i=0;i<n;i++)
    {
    
    
        for(int j=1;j<=m;j++)
        {
    
    
            if(a[i][j]=='.') cout<<a[i][j];
            else
            {
    
    
                map<int,int>mp;
                int sum=0;
                int x=i,y=j;
                for(int k=0;k<4;k++)
                {
    
    
                    int tempx=x+dx[k],tempy=y+dy[k];
                    if(tempx<0||tempx>=n||tempy<=0||tempy>m) continue;
                    if(a[tempx][tempy]=='*') continue;
                    int w=tempx*m+tempy;
                    if(mp[find(w)]) continue;
                    sum+=cnt[find(w)],mp[find(w)]=1;
                }
                cout<<(sum+1)%10;
            }
        }
        cout<<'\n';
    }
	return 0;
}

4421. 信号【贪心】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n,r;
int main(void)
{
    
    
	cin>>n>>r;
	for(int i=1;i<=n;i++) cin>>a[i];
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
    
    
		int pos=-1;
		for(int j=i;j<=i+r-1&&j<=n;j++) if(a[j]) pos=j;//右边找
		if(pos!=-1)
		{
    
    
			cnt++,i=pos+r-1;
			continue;
		}
		pos=-1;
		for(int j=max(1,i-r+1);j<=i;j++) if(a[j]) pos=j;//左边找
		if(pos==-1) 
		{
    
    
			puts("-1");
			return 0;
		}
		cnt++,i=pos+r-1;
		if(i>=n) break;
	}
	cout<<cnt;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46527915/article/details/124910194