搜索
热搜: NOIP OIer 神牛
查看: 378|回复: 3

1853 【抢气球】

[复制链接]

主题

帖子

0

积分

新手上路

Rank: 1

积分
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
就是时间内存有一点大
回复

使用道具 举报

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2022-7-24 18:01:42 | 显示全部楼层
  1. #include<bits/stdc++.h>
  2. using namespace std;

  3. const int maxn=1000000;
  4. int n,m;

  5. struct children{
  6.     int x,id;
  7. }

  8. a[maxn];
  9. int h[maxn],ans[maxn]={};

  10. bool cmp(children A,children B){
  11.     return A.x<B.x;
  12. }

  13. int main(){
  14.     scanf("%d%d",&n,&m);
  15.     for(int i=1;i<=n;i++){
  16.         scanf("%d",&a[i].x);
  17.         a[i].id=i;
  18.     }
  19.         for(int i=1;i<=m;i++){
  20.         scanf("%d",&h[i]);
  21.     }
  22.     stable_sort(a+1,a+n+1,cmp);
  23.     stable_sort(h+1,h+m+1);
  24.     int z,x,c=0;
  25.     for(int i=1;i<=n;i++){
  26.         int z=1;
  27.         int x=m;
  28.         int q=0;
  29.         while(z<=x){
  30.             int w=(z+x)>>1;
  31.             if(h[w]<=a[i].x){
  32.                 q=w;
  33.                 z=w+1;
  34.             }
  35.                         else{
  36.                 x=w-1;
  37.             }
  38.         }
  39.                 ans[a[i].id]=q-c;
  40.         c=q;
  41.     }
  42.         for(int i=1;i<=n;i++){
  43.         printf("%d\n",ans[i]);
  44.     }
  45.         return 0;
  46. }
复制代码
回复

使用道具 举报

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2022-7-24 18:02:49 | 显示全部楼层
本帖最后由 Ethan 于 2022-8-4 11:02 编辑

使用stable_sort是为了让稳定性更佳
回复

使用道具 举报

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2023-8-22 10:54:55 | 显示全部楼层
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. #define int long long
  5. bool cmp(int x,int y){
  6.         return x<y;
  7. }
  8. signed main(){
  9.     int n;//number of chidren
  10.     cin>>n;
  11.     int m;//number of ballon
  12.     cin>>m;
  13.     int a[100005],h[100005],jc[100005]={0},jb[100005]={0};//a mean chidren's high
  14.     for(int i=0;i<n;i++) cin>>a[i];
  15.     for(int i=0;i<m;i++) cin>>h[i];
  16.     sort(a,a+n,cmp);
  17.     for(int i=0;i<n;i++){
  18.             for(int j=0;j<m;j++){
  19.                     if(a[i]>=h[j]&&jb[j]==0){
  20.                             jc[i]++;
  21.                             jb[j]=1;
  22.                     }
  23.                 }
  24.         }
  25.         for(int i=0;i<n;i++) cout<<jc[i]<<'\n';
  26.     return 0;
  27. }
复制代码


求楼主帮我解决TLE
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

津ICP备19006949号-1 | 津公网安备12010102000465号

快速回复 返回顶部 返回列表