AtCoder Beginner Contest 342

AtCoder Beginner Contest 342

比赛链接

开学了,以后codeforces大概率只能补题了,但是atcoder还是可以做的

A - Yay!

思路

找出只出现一次的字符就可以

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long 

void solve(){
	string s;
	cin>>s;
	std::map<char, int> mp;
	for(int i=0;i<s.size();i++){
		mp[s[i]]++;
	}
	for(auto x:mp){
		if(x.second==1){
			// cout<<x.first<<endl;
			// // return ;
			for(int i=0;i<s.size();i++){
				if(s[i]==x.first){
					cout<<i+1<<endl;
					return ;
					
				}
			}
			
		}
	}
}

signed main(){
	int t=1;
	while(t--) solve();
	return 0;

}

B - Which is ahead?

思路

简单,我们只需要用map映射一下他们的位置就可以了,最后按照题意进行查询即可

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define all(x) x.begin()+1,x.end()


void solve(){
	int n;
	cin>>n;
	std::vector<int> a(n+1);
	std::map<int, int> mp;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		mp[a[i]]=i;
	}
	int q;
	cin>>q;
	while(q--){
		int x,y;
		cin>>x>>y;
		cout<<(mp[x]<mp[y]?x:y)<<endl;
	}
	return ;

}


signed main(){
	int t=1;
	while(t--) solve();
	return 0;

}

C - Many Replacement

思路

如果我们用map把原来的改成修改后的,这样做是不对的,因为我们会出现a-c-a这种情况是没办法改变的,要是每次遍历一遍字符串肯定会tle,但事实上小写英文的个数总共就26了,我们可以通过改这26给英文字母来进行修改

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define all(x) x.begin()+1,x.end()
#define debug(x) cout<<"# "<<x<<" "

void solve(){
	int n;
	cin>>n;
	string s;
	cin>>s;
	int q;
	cin>>q;
	int f[26];
	for(int i=0;i<26;i++){
		f[i]=i;
	}

	while(q--){
		char x,y;
		cin>>x>>y;
		for(int i=0;i<26;i++){
			if(f[i]==x-'a'){
				f[i]=y-'a';
			}
		}
	}
	for(int i=0;i<n;i++){
		cout<<char('a'+f[s[i]-'a']);
	}
	return ;
	
}

signed main(){
	int t=1;
	while(t--) solve();
	return 0;

}

D - Square Pair

思路

我们可以记录一下每个数字抛去可以开方的因子最后需要与其他数字进行乘从而得到新的开方使之开方后是正整数的个数就可以,注意审题,i要小于j,所以是有顺序的

参考文章

Code


posted @ 2024-02-26 18:57  du463  阅读(12)  评论(0编辑  收藏  举报