Acwing第 12 场周赛未完结
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Acwing第 12 场周赛未完结相关的知识,希望对你有一定的参考价值。
3803. 数组去重 【难度: 一般 / 知识点: 模拟】
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int inf=0x3f3f3f3f;
int a[N];
int main(void)
{
int t; cin>>t;
while(t--)
{
int n; cin>>n;
map<int,int>mp;
for(int i=0;i<n;i++) cin>>a[i],mp[a[i]]++;
cout<<mp.size()<<endl;
for(int i=0;i<n;i++)
{
if(mp[a[i]]==1) cout<<a[i]<<" ";
else mp[a[i]]--;
}
cout<<endl;
}
return 0;
}
3804. 构造字符串 【难度: 一般 / 知识点: 贪心 模拟】
用一个vector来保存一下字符的集合。
如果要构造的字符串长于给定的字符串,直接前面一样,后面补最小的字母即可。
如果构造的字母要短于,给定的字符,则直接前面一模一样,然后从后往前依次遍历集合找到可以替换的即可。
替换过后,后面的都用最小的字母来补齐。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int inf=0x3f3f3f3f;
int t,n,k;
map<char,int> mp;
string s;
string dfs(int n,int k,vector<char> ve)
{
string ans=s;
if(k<=n)
{
bool flag=false;
ans=s.substr(0,k);
int index=0;
for(int i=ans.size()-1;i>=0;i--)
{
for(int j=0;j<ve.size();j++)
{
if(ve[j]>ans[i])
{
ans[i]=ve[j];
flag=true;
index=i;
break;
}
if(flag) break;
}
if(flag) break;
}
for(int i=index+1;i<ans.size();i++) ans[i]=ve[0];
return ans;
}
else
{
for(int i=1;i<=k-n;i++) ans+=ve[0];
return ans;
}
}
int main(void)
{
cin>>t;
while(t--)
{
cin>>n>>k;
cin>>s;
vector<char> ve;
for(int i=0;i<s.size();i++)
{
if(mp[s[i]]) continue;
else ve.push_back(s[i]),mp[s[i]]++;
}
sort(ve.begin(),ve.end());
string ans=dfs(n,k,ve);
cout<<ans<<endl;
mp.clear();
s.clear();
}
return 0;
}
以上是关于Acwing第 12 场周赛未完结的主要内容,如果未能解决你的问题,请参考以下文章