开启辅助访问
切换到宽版
注册
登录
快捷导航
论坛
BBS
比赛活动
青少年信息学活动信息
群组
Group
搜索
搜索
热搜:
NOIP
OIer
神牛
本版
帖子
群组
用户
信息学基地社区
»
论坛
›
青少年信息学
›
信息学奥赛
›
OJ题解
›
1853 【抢气球】
返回列表
查看:
437
|
回复:
3
1853 【抢气球】
[复制链接]
Ethan
Ethan
当前离线
积分
0
主题
帖子
0
积分
新手上路
新手上路, 积分 0, 距离下一级还需 50 积分
新手上路, 积分 0, 距离下一级还需 50 积分
积分
0
发消息
发表于 2022-7-24 18:01:09
|
显示全部楼层
|
阅读模式
本帖最后由 Ethan 于 2023-3-19 09:06 编辑
输入第一行输入两个空格分隔的整数
n,m,
其中n表示小朋友的数量,m表示墙上气球的数量
第二行输入n个正整数(每两个整数之间用空格隔开),第i个数为ai,表示第i个小朋友跳起来手能够着的高度为ai
第三行输入m个正整数(每两个整数之间用空格隔开),第i个数为hi,表示第i个气球的高度为hi
输出一共n行,每行一个
整数
第i行表示第i个小朋友摘到的气球数量
代码已AC
就是时间内存有一点大
回复
使用道具
举报
置顶卡
Ethan
Ethan
当前离线
积分
0
主题
帖子
0
积分
新手上路
新手上路, 积分 0, 距离下一级还需 50 积分
新手上路, 积分 0, 距离下一级还需 50 积分
积分
0
发消息
楼主
|
发表于 2022-7-24 18:01:42
|
显示全部楼层
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000000;
int n,m;
struct children{
int x,id;
}
a[maxn];
int h[maxn],ans[maxn]={};
bool cmp(children A,children B){
return A.x<B.x;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i].x);
a[i].id=i;
}
for(int i=1;i<=m;i++){
scanf("%d",&h[i]);
}
stable_sort(a+1,a+n+1,cmp);
stable_sort(h+1,h+m+1);
int z,x,c=0;
for(int i=1;i<=n;i++){
int z=1;
int x=m;
int q=0;
while(z<=x){
int w=(z+x)>>1;
if(h[w]<=a[i].x){
q=w;
z=w+1;
}
else{
x=w-1;
}
}
ans[a[i].id]=q-c;
c=q;
}
for(int i=1;i<=n;i++){
printf("%d\n",ans[i]);
}
return 0;
}
复制代码
回复
使用道具
举报
Ethan
Ethan
当前离线
积分
0
主题
帖子
0
积分
新手上路
新手上路, 积分 0, 距离下一级还需 50 积分
新手上路, 积分 0, 距离下一级还需 50 积分
积分
0
发消息
楼主
|
发表于 2022-7-24 18:02:49
|
显示全部楼层
本帖最后由 Ethan 于 2022-8-4 11:02 编辑
使用
stable_sort
是为了让稳定性更佳
回复
使用道具
举报
tiger
tiger
当前离线
积分
0
主题
帖子
0
积分
新手上路
新手上路, 积分 0, 距离下一级还需 50 积分
新手上路, 积分 0, 距离下一级还需 50 积分
积分
0
发消息
发表于 2023-8-22 10:54:55
|
显示全部楼层
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
bool cmp(int x,int y){
return x<y;
}
signed main(){
int n;//number of chidren
cin>>n;
int m;//number of ballon
cin>>m;
int a[100005],h[100005],jc[100005]={0},jb[100005]={0};//a mean chidren's high
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<m;i++) cin>>h[i];
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i]>=h[j]&&jb[j]==0){
jc[i]++;
jb[j]=1;
}
}
}
for(int i=0;i<n;i++) cout<<jc[i]<<'\n';
return 0;
}
复制代码
求楼主帮我解决TLE
回复
使用道具
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
津ICP备19006949号-1 | 津公网安备12010102000465号
快速回复
返回顶部
返回列表