目录
E-聚会
E-聚会_2022河南萌新联赛第(一)场:河南工业大学 (nowcoder.com)
将数组元素排序之后分为三种情况:1:最小值不是1,那么未出现的最小正整数就是1;2:排序之后差值为1的,如1,2,3,4,5这样最后未出现的最小正整数就是所有数的和在加1。3:排序之后差值不为1,那么寻找第一个差值不为1中较小的数加1即为未出现的最小正整数,例如:1,3,4,5其中未出现的最小的正整数就是2。
代码:
F-买车
F-买车_2022河南萌新联赛第(一)场:河南工业大学 (nowcoder.com)
每次都到能跑的距离最长的地方买车,这样保证买的车是最少的。
代码:
#include<bits/stdc++.h>
using namespace std;
struct s
{
int a,b,c;
}p[100009];
bool cmp(s x,s y)
{
return x.a<y.a;
}
int main()
{
int n,m,t;
cin>>n>>m>>t;
for(int i=1;i<=m;i++)
{
cin>>p[i].a>>p[i].b;
p[i].c=p[i].a+p[i].b;//在该店买车行驶的距离
}
sort(p+1,p+m+1,cmp);
int d=t,max=0,ans=0;
for(int i=1;i<=m;i++)
{
if(p[i].a>d) //跑不到当前位置,那就在上一个位置买车
{
d=max;
ans++;
}
if(p[i].c>max) //每次更新能跑的最远的距离
{
max=p[i].c;//当前能跑的最远距离
}
}
if(d>=n) cout<<ans<<endl;
else cout<<"-1"<<endl;
return 0;
}
D-纪念品领取
D-纪念品领取_2022河南萌新联赛第(一)场:河南工业大学 (nowcoder.com)
将1-n分别用进入队列中,将之后要移动的同学编号仍然插入队列后面,并且每移动一次就在其相应的数组位置加1,然后如果每个对应的数组的值为0,表示没有被抽到,那么用b数组存放,相反遇见1次就减1次,直到b数组中满足有5个元素即可,将b数组中的元素进行排序,最后输出。
代码:
#include<bits/stdc++.h>
using namespace std;
int a[100009],b[10];
int main()
{
int n,m;
cin>>n>>m;
queue<int>q;
for(int i=1;i<=n;i++)
{
q.push(i);
}
for(int i=1;i<=m;i++)
{
int x;
cin>>x;
a[x]++;
q.push(x);
}
int j=0;
while(1)
{
int t=q.front();
q.pop();
// cout<<t<<endl;
if(j>=5)
break;
if(!a[t])
{
b[j]=t;
j++;
// cout<<b[j]<<' '<<j<<endl;
}
else
a[t]--;
}
sort(b,b+5);
// cout<<endl;
for(int i=0;i<5;i++)
cout<<b[i]<<" ";
return 0;
}