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
标签:std,AtCoder,Beginner,map,int,cin,long,342,define
From: https://www.cnblogs.com/du463/p/18033945