【十一月】第五次课堂练习

p2676

#include<stdio.h>
using namespace std;
int n;
int num[10001];
int m;
int ans;
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        int h;
        scanf("%d",&h);
        num[h]++;
    }
    ans = 0;
    for(int i=10000;i>=1;i--){
        if(num[i]){
            while(num[i]){
                m-=i;
                ans++;
                if(m<=0) {
                    printf("%d",ans);
                    return 0;
                }
                num[i]--;
            }
        }
    }
} 
View Code

p1177

#include<iostream>
using namespace std;
int n,a[1000001];
void qsort(int l,int r)//应用二分思想
{
    int mid=a[(l+r)/2];//中间数
    int i=l,j=r;
    do{
        while(a[i]<mid) i++;//查找左半部分比中间数大的数
        while(a[j]>mid) j--;//查找右半部分比中间数小的数
        if(i<=j)//如果有一组不满足排序条件(左小右大)的数
        {
            swap(a[i],a[j]);//交换
            i++;
            j--;
        }
    }while(i<=j);//这里注意要有=
    if(l<j) qsort(l,j);//递归搜索左半部分
    if(i<r) qsort(i,r);//递归搜索右半部分
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    qsort(1,n);
    for(int i=1;i<=n;i++) cout<<a[i]<<" ";
}
View Code

p1059

#include<iostream>
using namespace std;
int main(){
    int n,x;
    cin>>n;
    int sum(0),bus[1002]={0};
    for(int i=1;i<=n;i++){
        cin>>x;
        if(bus[x])  //如果这个数已经出现过了,那么跳过
            continue;
        bus[x]++;  //如果没有出现,把数据放在桶里,并让总数居++
        sum++;
    }
    cout<<sum<<endl;
    for(int i=1;i<=1000;i++)
        if(bus[i])
            cout<<i<<' ';
    cout<<endl;
    return 0;
}
View Code

p1923

#include<iostream>
using namespace std;
int main(){
    int n,x;
    cin>>n;
    int sum(0),bus[1002]={0};
    for(int i=1;i<=n;i++){
        cin>>x;
        if(bus[x])  //如果这个数已经出现过了,那么跳过
            continue;
        bus[x]++;  //如果没有出现,把数据放在桶里,并让总数居++
        sum++;
    }
    cout<<sum<<endl;
    for(int i=1;i<=1000;i++)
        if(bus[i])
            cout<<i<<' ';
    cout<<endl;
    return 0;
}
View Code

p2249

#include<cstdio>
using namespace std;

int n,m,q,a[1000005];

int find(int x) //二分查找 
{
    int l=1,r=n;
    while (l<r)
    {
        int mid=l+(r-l)/2;
        if (a[mid]>=x) r=mid;
        else l=mid+1;
    }
    
    if (a[l]==x) return l; //找都了就输出他的位置 
    else return -1; // 没找到输出-1 
}

int main()
{
    scanf("%d %d",&n,&m); //读入 
    
    for (int i=1 ; i<=n ; i++)
        scanf("%d",&a[i]); //还是读入 
    
    for (int i=1 ; i<=m ; i++)
    {
        scanf("%d",&q);
        int ans=find(q); //看看查找的结果 
        printf("%d ",ans); //输出 
    }
    
    return 0;
}
View Code

p1678

#include<stdio.h>
#include<algorithm>
using namespace std;
int n,m;
int a[1000005];
long long ans;
int main(){
    scanf("%d%d",&m,&n);
    for(int i=1;i<=m;i++) scanf("%d",&a[i]);
    sort(a+1,a+1+m);
    ans = 0;
    for(int i=1;i<=n;i++){
        int g;
        scanf("%d",&g);
        int l=1,r=m;
        int gg = 1000000;
        while(l<=r){
            int mid = (l+r)/2;
            gg = min(abs(a[mid]-g),gg);
            if(a[mid] == g) break;
            else if(a[mid]<g) l=mid+1;
            else if(a[mid]>g) r=mid-1;
        }
        ans+=gg;
    }
    printf("%lld",ans);
}
View Code

p2240

#include <bits/stdc++.h>
using namespace std;
long long a[100001],t=0,k,m,n;
int js(int x)
{
    register int i;
    t=0;
    for(i=1;i<=n;i++)
    {
        t+=a[i]/x;
        if(t>=k) return 1;
    }
    return 0;
}
int main()
{
    long long s,l=0,r=0x7fffffff;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
    scanf("%d",&a[i]);
    while(l+1<r)
    {
        m=l+(r-l)/2;
        if(js(m)==1) l=m;
        else r=m;
    }
    printf("%d",l);
    return 0;
}
View Code
posted @ 2021-11-26 16:38  Oranges  阅读(44)  评论(0编辑  收藏  举报