AtCoder Beginner Contest 235
Posted 最爱小崔同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoder Beginner Contest 235相关的知识,希望对你有一定的参考价值。
A Rotate
abc +bca +cab
#include <bits/stdc++.h>
using i64 = long long;
int main()
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int x;
std::cin >> x;
std::cout << (x % 10 + x / 10 % 10 + x / 100) * 111 << "\\n";
return 0;
B B - Climbing Takahashi
#include<bits/stdc++.h>
using namespace std;
int main()
int n;
cin>>n;
int ans=-1;
for(int i=1;i<=n;i++)
int x;
cin>>x;
if(x>ans)
ans=x;
else
break;
cout<<ans<<endl;
C - The Kth Time Query
题目描述:给你一个长度为n的数组A,给你Q个询问,每次询问(x,k)表示数字x在A中第k次出现的位置。若k大于x的数量或者A中不存在整数x输出−1。
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=2e5+10;
map<int,int> mp;
map<PII,int> mm;
int main()
int n,q;
cin>>n>>q;
for(int i=1;i<=n;i++)
int x;
cin>>x;
mp[x]++;
mm[make_pair(x,mp[x])]=i;
while(q--)
int a,b;
cin>>a>>b;
if(mp[a]<b)
cout<<"-1"<<endl;
continue;
else
cout<<mm[make_pair(a,b)]<<endl;
return 0;
D - Multiply and Rotate
两种操作将1变成N 一个是*a 另一个是将最后以后数变到最前面如 123变成312
直接爆搜即可
#include<bits/stdc++.h>
using namespace std;
int ans=1e7;
int a,b;
map<int,int> mp;
int calc(int d)
string c=to_string(d);
int res=c[(c.size()-1)]-'0';
for(int i=0;i<c.size()-1;i++)
res=res*10+(c[i]-'0');
return res;
void dfs(int t,int cnt)
if(t==b)
ans=min(ans,cnt);
return ;
if(t>b*10) return ;
mp[t]=true;
dfs(t*a,cnt+1);
if(t>=10&&t%10!=0)
if(!mp[calc(t)])
dfs(calc(t),cnt+1);
return;
int main()
cin>>a>>b;
dfs(1,0);
if(ans==1e7) cout<<"-1"<<endl;
else cout<<ans<<endl;
return 0;
就是一个Kruskal的变形
#include<bits/stdc++.h>
using namespace std;
int n,m,q;
const int N=2e6+10;
struct Edge
int a,b,w,f;
bool operator<(const Edge&j) const
return w<j.w;
edge[N];
int ans[N];
int p[N];
int find(int x)
if(p[x]!=x) p[x]=find(p[x]);
return p[x];
int main()
cin>>n>>m>>q;
for(int i=1;i<=n;i++) p[i]=i;
for(int i=1;i<=m+q;i++)
int a,b,w,f;
cin>>a>>b>>w;
edge[i]=a,b,w,-1;
if(i>m) edge[i].f=i-m;
sort(edge+1,edge+1+m+q);
int cnt=0;
for(int i=1;i<=m+q;i++)
if(cnt==n-1) break;
int a=edge[i].a;
int b=edge[i].b;
int w=edge[i].w;
a=find(a),b=find(b);
if(a!=b)
if(edge[i].f!=-1)
ans[edge[i].f]=1;
continue;
p[a]=b;
cnt++;
for(int i=1;i<=q;i++)
if(ans[i]==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
以上是关于AtCoder Beginner Contest 235的主要内容,如果未能解决你的问题,请参考以下文章
AtCoder Beginner Contest 115 题解