STL库和二分保龄球
2023-12-28 21:28:12
保龄球
题意
DL告诉你他想打的球数,需要告诉他下标是什么
算法一:STL库–map
实现步骤
通过map记录每个位置的保龄球数
1.for循环中ma[a]=i 把坐标定义进去
2.第二个for循环ma[m] 把数值代入ma函数,最后输出的就是其下标
代码
#include <iostream>
#include <map>
using namespace std;
map<int,int>ma;
int main(){
int n;
cin>>n;
int a;
for(int i=1;i<=n;i++){
cin>>a;
ma[a]=i;//给每个瓶子数的下标定义
}
int q;
cin>>q;
int m;
for(int i=1;i<=q;i++){
cin>>m;
cout<<ma[m]<<endl;//每个瓶子数通过ma找到其下标并输出
}
return 0;
}
算法二:二分
实现步骤
- 先结构体数组把保龄球的个数和坐标定义一下,再用二分查找来找到相对应的个数,最后输出其下标
代码
#include<bits/stdc++.h>
using namespace std;
long long n,m,a,ans;
struct data //结构体数组
{
long long h,H;//h为保龄球个数,H为原先保龄球的坐标
}N[100005];
bool cmp(data x,data y)
{
return x.h<y.h;
}
bool pd(long long A,long long l,long long r)//用二分查找找出对应保龄球的个数
{
long long mid=(l+r)/2;
if(N[mid].h==A)
{
ans=N[mid].H;
return true;
}
if(l>r)return false;
if(A<=N[mid].h)return pd(A,l,mid-1);
else return pd(A,mid+1,r);
}
int main()
{
cin>>n;
for(long long i=1;i<=n;i++)
{
cin>>N[i].h;
N[i].H=i;
}
sort(N+1,N+1+n,cmp);
cin>>m;
for(long long i=1;i<=m;i++)
{
cin>>a;
if(pd(a,1,n))
{
cout<<ans<<endl;//
}
else cout<<0<<endl;
}
return 0;
}
总结
用STL库更容易
文章来源:https://blog.csdn.net/2301_81102850/article/details/135277762
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!