题解

249 条题解

  • 5
    @ 2018-05-15 23:51:04

    不知道这个题为什么难度6……
    可能有两个坑:
    1.苹果只能摘高度小于它的陶陶,高度和它相等的不能摘。
    2.高度为0的陶陶不能摘。
    但其实讲道理认真读题的话这两点都可以规避……
    方法就是纯模拟,没什么好说的……直接上代码,应该说比较简洁……

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,m,ans;
    int a[2005],t[2005];
    bool bj[2005];
    int main()
    {
        cin>>n>>m;
        ans=m;
        for(int i=1;i<=n;++i)
            cin>>a[i];
        for(int i=1;i<=m;++i)
            cin>>t[i];
        sort(t+1,t+m+1);
        for(int i=1;i<=n;++i)
            for(int j=m;j>=1;--j)
                if((a[i]>t[j])&&(bj[j]==0)&&(t[j]!=0))
                {
                    bj[j]=1;
                    ans--;
                    break;
                }
        cout<<ans;
        return 0;
    }
    
    • @ 2020-11-12 18:07:42

      因为这题目太容易坑,由于过于简单,想复杂了,我提交了7次才过

  • 3
    @ 2018-02-05 22:38:44

    水。。。。

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    const int maxn=2005;
    int a[maxn];
    int b[maxn];
    bool al[maxn];
    int low=-1;
    int ans;
    int k;
    int main(){
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++)cin>>a[i];
        for(int i=1;i<=m;i++)cin>>b[i];
        
        for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
                if(b[j]!=0 && a[i]>b[j] && low<b[j] && al[j]==false){
                    low=b[j];
                    k=j;
                }   
            }
            if(low!=-1)ans++;
            al[k]=true;
            low=-1;
            
        }
        
        cout<<m-ans;
        
        return 0;
    }
    
  • 2
    @ 2018-11-06 09:37:16

    既然n和m都是2000,而最大高度是300,那么为什么要让复杂度变成2000乘2000呢,反手就是一份300乘2000的。

    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    int a[2010];
    int b[300];
    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++){
            int x;
            scanf("%d",&x);
            b[x]++;
        }
        sort(a+1,a+n+1);
        for(int i=1;i<=n;i++){
            for(int j=a[i]-1;j>=1;j--){
                if(b[j]){
                    b[j]--;
                    m--;
                    break;
                }       
            }
        }
        printf("%d",m);
        return 0;
    }
        
    
  • 2
    @ 2018-01-09 12:20:01

    var
    a,b:array[1..2000]of integer;
    s,n,m,i,j,t:longint;
    begin
    read(n,m);
    s:=m;
    for i:=1 to n do
    readln(a[i]);
    for i:=1 to m do
    readln(b[i]);
    for i:=1 to n-1 do
    for j:=i+1 to n do
    if b[i]<b[j]then begin
    t:=b[i];
    b[i]:=b[j];
    b[j]:=t;
    end;
    for i:=1 to n do
    for j:=1 to m do
    if (a[i]>b[j])and(b[j]<>0) then
    begin
    s:=s-1;
    b[j]:=0;
    break;
    end;
    writeln(s);
    end.

  • 2
    @ 2017-07-06 13:23:05

    纯粹模拟。题目最后要考虑到不能摘的,位置为0的陶陶。
    读程序注释:harvester(收割者)是苹果,fruit(果实)是可怜的陶陶。
    就是这样。恩恩。程序没有任何技术含量。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main()
    {
        int fruit_height[301];
        memset(fruit_height,0,sizeof(fruit_height));
        int harvester, fruit;
        cin>>harvester>>fruit;
        int i,j;
        int harvester_height[harvester];
        for(i=0;i<harvester;i++)
        {
            cin>>j;
            harvester_height[i]=j;
        }
        for(i=0;i<fruit;i++)
        {
            cin>>j;
            fruit_height[j]+=1;
        }
        for(i=0;i<harvester;i++)
        {
            for(j=harvester_height[i]-1;j>0;j--)
            {
                if(fruit_height[j]>0)
                {
                    fruit_height[j]--;
                    fruit--;
                    goto end;
                }
            }
            end:
            continue;
        }
        cout<<fruit<<endl;
    }
    
  • 1
    @ 2022-04-07 20:26:39

    给大家公布一下我自己写的代码(不参考任何人,易理解,不调用除iostream以外的头文件)

    #include <iostream>
    using namespace std;
    
    int sa,st,y[2],apple[2010],Taotao[2010];
    
    int  big(int a,int b[2010],int c){
        if(a>300){
            return -1;
        }
        int d = -1,e=0;
        for(int i=0;i<c;i++){
            if(b[i] <a){
                if(b[i]>d and b[i] != 0){
                    d=b[i];
                    e=i;
                } 
            }
        }
        if (d!=-1){
            b[e] = 700;
        }
        return d;
    }
    
    int main(int argc, char** argv) {
        cin>>y[0]>>y[1];
        sa=y[0];
        st=y[1];
        for(int i=0;i<y[0];i++) {
            cin>>apple[i];
        }
        for(int i=0;i<y[1];i++) {
            cin>>Taotao[i];
        }
        int r;
        for(int i=0;sa!=0;i++){
            r=big(apple[i],Taotao,y[1]);
            if (r==-1){
                sa--;
            }
            else{
                sa--;st--;
            }
        }
        cout<<st;
        return 0;
    }
    

    有帮助的扣个1

  • 1
    @ 2020-10-14 14:35:29
    #include <cmath>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    namespace dts
    {
        int n,m,ans,a[2000],t[2000];
        
        int cmp(int x,int y)
        {
            return x<y;
        }
        
        void main()
        {
            scanf("%d%d",&n,&m);
            for (int i=0;i<n;i++)
                scanf("%d",&a[i]);
            for (int i=0;i<m;i++)
                scanf("%d",&t[i]);
            sort(&a[0],&a[n],cmp);
            sort(&t[0],&t[m],cmp);
            ans=0;
            for (int i=0,j=0;i<n&&j<m;)
            {
                while (t[j]==0&&j<m)
                    j++;
                if (j==m)
                    break;
                while (a[i]<=t[j])
                    i++;
                if (i<n)
                    i++,j++,ans++;
            }
            printf("%d\n",m-ans);
        }
    }
    
    int main()
    {
        dts::main();
    }
    
  • 1
    @ 2020-03-19 15:03:53

    @不退 的😝

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,m,ans;
    int a[2005],t[2005];
    bool bj[2005];
    int main()
    {
        cin>>n>>m;
        ans=m;
        for(int i=1;i<=n;++i)
            cin>>a[i];
        for(int i=1;i<=m;++i)
            cin>>t[i];
        sort(t+1,t+m+1);
        for(int i=1;i<=n;++i)
            for(int j=m;j>=1;--j)
                if((a[i]>t[j])&&(bj[j]==0)&&(t[j]!=0))
                {
                    bj[j]=1;
                    ans--;
                    break;
                }
        cout<<ans;
        return 0;
    }
    

    补充一下:测试点全a

  • 1
    @ 2020-03-17 21:23:52
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    int apple[2005];
    int taotao[2005];
    int visited[2005];
    
    int main() {
        int n, m;
        cin >> n >> m;
        int cnt = m;
        
        for(int i = 0 ; i < n ; ++i) {
            cin >> apple[i];
        } 
        
        for(int i = 0 ; i < m ; ++i) {
            cin >> taotao[i];
        }
        
        sort(taotao, taotao + m);  //将淘淘排序 
        
        for(int i = 0 ; i < n ; ++i) {
            for(int j = m - 1 ; j >= 0 ; --j) {
                if(!visited[j] && apple[i] > taotao[j] && taotao[j] != 0) {  //如果没有被摘,且能摘到,且不为0 
                    visited[j] = 1;
                    cnt--;
                    break;
                }
            } 
        } 
    
        cout << cnt << endl;    
        return 0; 
    } 
    
  • 1
    @ 2019-10-27 11:28:06

    和你们的很像,但真是我自己写的:
    #include <iostream>
    #include <algorithm>
    using namespace std;
    int n,m,ans,apple[100000],t[100000];
    bool f[10000];
    int main()
    {
    cin>>n>>m;
    ans=m;
    for(int i=1;i<=n;i++)cin>>apple[i];
    for(int i=1;i<=m;i++)cin>>t[i];
    sort(t+2,t+m+1);
    for(int i=1;i<=n;i++)
    {
    for(int j=m;j>=1;j--)
    {
    if(apple[i]>t[j] && t[j]!=0 && f[j]==false)
    {
    f[j]=true;
    ans--;
    break;
    }
    }
    }
    cout<<ans<<endl;
    return 0;
    }

  • 1
    @ 2019-07-24 20:38:31

    来一个简洁的
    #include <iostream>
    using namespace std;
    int main()
    {
    int n,m,tt[2000],pg[2000],i,j,e,a;
    cin>>n>>m;
    a=m;
    for(i=0;i<2000;i++) tt[i]=0;
    for(i=0;i<n;i++) cin>>pg[i];
    for(i=0;i<m;i++) cin>>tt[i];
    for(i=0;i<m-1;i++) for(j=i+1;j<m;j++) if(tt[i]<tt[j])
    {e=tt[i];tt[i]=tt[j];tt[j]=e;}
    for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    if(pg[i]>tt[j]&&tt[j]!=0) {a--;tt[j]=0;break;}
    cout<<a;
    return 0;
    }

  • 1
    @ 2009-10-18 14:25:41

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    因为高度最大为300 开一个数组 a[i]表示高度为i的苹果有a[i]个

    对每个苹果 从j=(能摘到的最大高度-1)开始向下找到a[j]>0 然后dec(j) dec(m)

    最后输出m即可

    ps:烂陶陶不用管 读入时加个 >0 的判断就行 如果有烂的也都算在m里了所以只要把能摘下来的都dec掉剩的m就是答案

    源程序:

    var

    n,m,i,j,x:longint;

    a:array[1..300]of longint;

    b:array[1..2000]of longint;

    begin

    readln(n,m);

    for i:=1 to n do readln(b[i]);

    for i:=1 to m do

    begin

    readln(x);

    if x>0 then inc(a[x]);

    end;

    for i:=1 to n do

    for j:=b[i]-1 downto 1 do

    if a[j]>0 then begin

    dec(a[j]);

    dec(m);

    break;

    end;

    writeln(m);

    end.

  • 0
    @ 2023-07-21 17:13:08
    #include <iostream>
    #include <bits/stdc++.h>
    using namespace std;
    int N[10000], M[10000];
    int main() {
        int n, m, i = 0, d = 0, count = 0;
        cin >> n >> m;
        int x = n, y = m;
        while (x--) {
            cin >> N[i];
            i++;
        }
        while (y--) {
            cin >> M[d];
            d++;
        }
        sort(M, M + m);
        reverse(M, M + m);
        for (i = 0; i < n; i++) {
            for (d = 0; d < m; d++) {
                if (N[i] > M[d] && M[d] != 0) {
                    M[d] = 0;
                    count++;
                    break;
             }
            }
        }
        cout << m - count;
        return 0;
    }
    
  • 0
    @ 2021-10-29 19:40:07

    #include<iostream>
    #include<algorithm>
    constexpr auto MAX = 2000;
    using namespace std;
    int t[MAX];
    int p[MAX];
    int sum[MAX];
    int main()
    {
    int n, m;
    cin >> n >> m;
    int count = m;
    for (int i = 0; i < n; i++)
    {
    cin >> p[i];
    }
    for (int i = 0; i < m; i++)
    {
    cin >> t[i];
    }
    sort(t, t + m);
    for (int i = 0; i < n; i++)
    {
    for (int j = m - 1; j >= 0; j--)
    {
    if ((sum[j] == 0) && (t[j] != 0) && (p[i] > t[j]))
    {
    count--;
    sum[j] = 1;
    break;
    }
    }
    }
    cout << count;
    return 0;
    }

  • 0
    @ 2020-06-22 22:15:42

    用了一下优先队列 AC
    ```cpp
    #include<queue>
    #include<iostream>
    using namespace std;

    int main(void) {
    priority_queue<int, vector<int>, less<int> > apple, tt;
    int apNum, tNum;
    scanf("%d %d", &apNum, &tNum);
    getchar();
    int t;
    for (int i = 0; i < apNum; i++) {
    scanf("%d", &t);
    getchar();
    apple.push(t);
    }
    for (int i = 0; i < tNum; i++) {
    scanf("%d", &t);
    getchar();
    tt.push(t);
    }
    int left = tNum;
    int a = 0;
    while (! tt.empty()) {
    t = tt.top();
    tt.pop();
    if (t == 0) {
    left--;
    break;
    }
    a = apple.top();
    if (a > t) {
    apple.pop();
    left--;
    }
    }
    printf("%d\n", left+1);
    }
    ```

  • 0
    @ 2018-07-15 09:36:01

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,m,ans;
    int a[2005],t[2005];
    bool bj[2005];
    int main()
    {
    cin>>n>>m;
    ans=m;
    for(int i=1;i<=n;++i)
    cin>>a[i];
    for(int i=1;i<=m;++i)
    cin>>t[i];
    sort(t+1,t+m+1);
    for(int i=1;i<=n;++i)
    for(int j=m;j>=1;--j)
    if((a[i]>t[j])&&(bj[j]==0)&&(t[j]!=0))
    {
    bj[j]=1;
    ans--;
    break;
    }
    cout<<ans;
    return 0;
    }

  • 0
    @ 2018-05-12 19:47:53

    #include <iostream>
    using namespace std;
    int zz[2100],tt[2100];
    int main(int argc, char** argv)
    {
    int n,m,key;
    int max=0;
    int a=0;
    cin>>n>>m;
    int m1=m;
    for(int i0=0;i0<n;i0++)
    {
    cin>>zz[i0];
    }
    for(int i1=0;i1<m;i1++)
    {
    cin>>tt[i1];
    }
    for(int i=0;i<n;i++)
    {
    max=0;
    a=0;
    key=0;
    for(int j=0;j<m;j++)
    {
    if(zz[i]>tt[j]&&tt[j]>max)
    {
    a=j;
    max=tt[j];
    key=1;
    }
    }
    if(key==1)
    {
    tt[a]=0;
    m1--;

    }
    }
    cout<<m1;
    return 0;
    }

  • 0
    @ 2017-11-11 09:13:15
    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    vector<int>taotao;
    vector<int>apple;
    int main()
    {
        cin >> n >> m;
        for (int i = 0, ans; i < n; i++)
        {
            cin >> ans;
            apple.push_back(ans);
        }
        for (int i = 0, ans; i < m; i++)
        {
            cin >> ans;
            taotao.push_back(ans);
        }
        sort(apple.begin(), apple.end());
        sort(taotao.begin(), taotao.end(),greater<int>());
        for(int i=0;i<n;i++)
            for (auto j = taotao.begin(); j != taotao.end(); j++)
            {
                if (apple.at(i) > *j&&*j != 0)
                {
                    taotao.erase(j);
                    break;
                }
            }
        cout << taotao.size();
        return 0;
    }
    
    
    

    从一年前做到今天的题目啊,算法很水,但一定要记住,高度为0的陶陶不能摘,不能摘,不能摘(9个点)还有苹果的高度一定要**大于**陶陶的高度

  • 0
    @ 2017-10-18 22:11:29

    #include <bits/stdc++.h>

    using namespace std;

    int main()
    {
    int fruit_height[301];
    memset(fruit_height,0,sizeof(fruit_height));
    int harvester, fruit;
    cin>>harvester>>fruit;
    int i,j;
    int harvester_height[harvester];
    for(i=0;i<harvester;i++)
    {
    cin>>j;
    harvester_height[i]=j;
    }
    for(i=0;i<fruit;i++)
    {
    cin>>j;
    fruit_height[j]+=1;
    }
    for(i=0;i<harvester;i++)
    {
    for(j=harvester_height[i]-1;j>0;j--)
    {
    if(fruit_height[j]>0)
    {
    fruit_height[j]--;
    fruit--;
    goto end;
    }
    }
    end:
    continue;
    }
    cout<<fruit<<endl;
    }

  • 0
    @ 2017-08-16 00:40:38
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int main(){
        int i,j,x=1,y=1,n,m,apple[5000],taotao[5000],all=0;
        scanf("%d %d",&n,&m);
        for(i=1;i<=n;i++)
        {
            scanf("%d",&apple[i]);
        }
        for(i=1;i<=m;i++)
        {
            scanf("%d",&taotao[i]);
        }
        sort(taotao+1,taotao+m+1);
        sort(apple+1,apple+n+1);
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                if(taotao[j]<apple[i]&&taotao[j]>0)
                {
                    taotao[j]=-100;
                    all++;
                    break;
                }
            }
        }
        printf("%d",m-all);
        return 0;
    }
    

信息

ID
1291
难度
6
分类
贪心 点击显示
标签
(无)
递交数
9790
已通过
2345
通过率
24%
被复制
17
上传者