两天一份codeforce,先从div3开始,C题注意特判0和n,D题我倒是觉得是最难想的一个。E题实际很简单,F题注意不要直接用map记录每个数字的位置,要保证数字出现的先后顺序。E和F基本就是参考标程写的,原本自己没有看一眼就退真是罪过····
A
#include <iostream>
using namespace std;
int main()
{
int n,k; cin>>n>>k;
for(int i=0;i<k;i++){
if(n%10) n--;
else n/=10;
}
cout<<n<<endl;
return 0;
}
B
#include <iostream>
#include <string.h>
using namespace std;
char a[205];int n;
int main()
{
cin>>n>>a;
char ans[5];
int res=0;
for(int i=0;i<n-1;i++){
int cou=0;
for(int j=0;j<n-1;j++){
if(a[i]==a[j]&&a[i+1]==a[j+1])
cou++;
if(res<cou){
res=cou;
ans[0]=a[i];ans[1]=a[i+1];
}
}
}
ans[2]='\0';
cout<<ans<<endl;
return 0;
}
C
#include <iostream>
#include <algorithm>
using namespace std;
const int N=2e5+10;
const int inf=1e9;
int a[N];
int main()
{
int n,k; cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
if(k==n) cout<<a[n]<<endl;
else if(k==0) {
if(a[1]>1)
cout<<a[1]-1<<endl;
else cout<<-1<<endl;
}
else{
if(a[k+1]-a[k]>=1){
cout<<a[k]<<endl;
}
else
cout<<-1<<endl;
}
return 0;
}
D
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long LL;
vector<pair<int,LL> >a;
int cou(LL x){
int ans=0;
while(x%3==0){
ans++;
x/=3;
}
return ans;
}
int main()
{
int n;cin>>n;
a.resize(n);
for(int i=0;i<n;i++){
cin>>a[i].second;
a[i].first=-cou(a[i].second);
}
sort(a.begin(),a.end());
for(int i=0;i<n;i++){
cout<<a[i].second<<" ";
}
cout<<endl;
return 0;
}
E
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
vector<int>g[N],comp;
int degree[N];
bool f[N];
void dfs(int x){
f[x]=1;
comp.push_back(x);
for(auto y:g[x]){
if(!f[y])
dfs(y);
}
}
int main() {
int n,m; cin>>n>>m;
for(int i=0;i<m;i++){
int x,y; cin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
degree[x]++;degree[y]++;
}
int res=0;
for(int i=0;i<n;i++){
if(!f[i]){
comp.clear();
dfs(i);
bool ok=1;
for(auto x:comp){
ok&=(degree[x]==2);
}
if(ok) res++;
}
}
cout<<res<<endl;
return 0;
}
F
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
const int N=2e5+10;
map<int,int>dp,pos;
int a[N];
vector<int>temp;
int main()
{
int n; cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
pos[a[i]]=i+1;
}
int res=0,ll;
for(int i=0;i<n;i++){
dp[a[i]]=dp[a[i]-1]+1;
if(res<dp[a[i]]){
res=dp[a[i]];
ll=a[i];
}
}
cout<<res<<endl;
int now=ll;
for(int i=n-1;i>=0;i--){
if(a[i]==now){
temp.push_back(i+1);
now--;
}
}
reverse(temp.begin(),temp.end());
for(auto it:temp){
cout<<it<<" ";
}
cout<<endl;
}