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;
}