Acwing第 36 场周赛完结

Posted 辉小歌

tags:

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

目录

4215. 处理字符串


https://www.acwing.com/problem/content/4218/

#include<bits/stdc++.h>
#define YES puts("YES");
#define Yes puts("Yes");
#define yes puts("yes");
#define NO  puts("NO");
#define No  puts("No");
#define no  puts("no");
using namespace std;
typedef long long int LL;
typedef pair<int,int> PII;
const int N=1e5*2+10;
const int mod=1e9+7;
int n,m,t;
int a[N];
map<char,int>mp;
int main(void)

	string s; cin>>s;
	string ans;
	mp['a']=1,mp['e']=1,mp['i']=1;
	mp['o']=1,mp['u']=1,mp['y']=1;
	for(int i=0;i<s.size();i++)
	
	    s[i]=tolower(s[i]);
	    if(mp[s[i]]) continue;
	    ans+='.';
	    ans+=s[i];
	
	cout<<ans;
	return 0;

4216. 图中的环【判环】


https://www.acwing.com/problem/content/4219/

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int p[N],n,m;
int find(int x)

	if(x!=p[x]) p[x]=find(p[x]);
	return p[x];

int main(void)

	cin>>n>>m;
	for(int i=1;i<=n;i++) p[i]=i;
	int cnt=0;
	while(m--)
	
		int a,b; cin>>a>>b;
		if(find(a)==find(b)) cnt++;//环
		p[find(a)]=find(b);
	
	map<int,int>mp;//统计有几个不同祖宗的点
	for(int i=1;i<=n;i++) mp[find(i)]++;
	if(mp.size()==1&&cnt==1) puts("YES");//没有孤点且只有一个环
	else puts("NO");
	return 0;

4217. 机器人移动【二分】


https://www.acwing.com/problem/content/4220/

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
int U[N],D[N],L[N],R[N],n,a,b;
string s;
bool solve(int i,int j,int sum)

	int u=U[i-1]+U[n]-U[j];
	int d=D[i-1]+D[n]-D[j];
	int l=L[i-1]+L[n]-L[j];
	int r=R[i-1]+R[n]-R[j];
	int x=0,y=0;
	y+=u,y-=d,x-=l,x+=r;
	sum-=abs(x-a);
	sum-=abs(y-b);
	if(sum>=0&&sum%2==0) return true;
	return false;

bool check(int len)

    for(int i=1;i+len-1<=n;i++)
    
        int j=i+len-1;
		if(solve(i,j,len)) return true;
    
    return false;

int main(void)

	cin>>n>>s>>a>>b;
	s="0"+s;
	for(int i=1;i<s.size();i++)
	
		U[i]=U[i-1],D[i]=D[i-1],L[i]=L[i-1],R[i]=R[i-1];
		if(s[i]=='U') U[i]++;
		if(s[i]=='D') D[i]++;
		if(s[i]=='L') L[i]++;
		if(s[i]=='R') R[i]++;
	
	if(abs(a)+abs(b)>n||(n-abs(a)-abs(b))%2) 
	
	    puts("-1");
	    return 0;
	
	int l=0,r=n;
	while(l<r)
	
	    int mid=l+r>>1;
	    if(check(mid)) r=mid;
	    else l=mid+1;
	
    cout<<l<<endl;
	return 0;

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

Acwing第 31 场周赛完结

Acwing第 56 场周赛完结

Acwing第 32 场周赛完结

Acwing第 59 场周赛完结

Acwing第 35 场周赛完结

Acwing第 57 场周赛未完结