题解

241 条题解

  • 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-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;
    }
    
  • 2
    @ 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-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.

  • 1
    @ 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;
    }
    
  • 0
    @ 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;
    }

  • 0
    @ 2019-06-25 19:38:38
    #include <iostream>
    #include <algorithm>
    #define maxn 2016
    using namespace std;
    
    int main()
    {
        int a[maxn],b[maxn],n,m;
        while(cin>>n>>m){
            int sum=m;
            for(int i=0;i<n;i++){
                cin>>a[i];
            }
            for(int i=0;i<m;i++){
                cin>>b[i];
            }
            sort(a,a+n);
            sort(b,b+m);
    
            for(int i=n-1;i>=0;i--){
                for(int j=m-1;j>=0;j--){
                    if(a[i]>b[j]&&b[j]!=0){
                        b[j]=0;
                        sum--;
                        j=0;
                    }
                }
            }
            cout<<sum<<endl;
        }
        return 0;
    }
    
    
  • 0
    @ 2018-11-30 19:30:27

    #include<stdio.h>
    int main(void)
    {
    int i,j,temp,a,t,apple[2000],tao[2000],count=0;
    scanf("%d%d",&a,&t);
    for(i=0;i<a;i++) scanf("%d",&apple[i]);
    for(i=0;i<t;i++) scanf("%d",&tao[i]);
    for(i=0;i<t-1;i++)
    for(j=i+1;j<t;j++) if(tao[i]<tao[j]) {
    temp=tao[i];
    tao[i]=tao[j];
    tao[j]=temp;
    }
    for(i=0;i<a;i++)
    for(j=0;j<t;j++){
    if(tao[j]>0) if(apple[i]>tao[j]) {tao[j]=-1;break;}
    }
    for(i=0;i<t;i++) if(tao[i]>=0) count++;
    printf("%d\n",count);
    return 0;
    }
    要注意三点:
    1、要先对陶陶从高到矮排序。
    2、苹果只能摘比自己矮的陶陶,和自己一样高的不能摘。
    3、身高为0的陶陶不能摘。

  • 0
    @ 2018-10-15 16:49:48

    #include<iostream>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    int apple[2001] = { 0 };
    int taotao[2001] = { 0 };
    int book[1001] = { 0 };
    int main()
    {
    int n, m,i,j,account=0;
    cin >> n >> m;
    for (i = 0; i < n; i++)
    cin >> apple[i];
    for (j = 0; j < m; j++)
    cin >> taotao[j];
    //这个时候i=n-1 j=m-1
    sort(apple, apple + n);
    sort(taotao, taotao + m);
    for (i=n-1; i >= 0; i--)
    {
    for (; j >= 0; j--)
    {
    if (apple[i] > taotao[j] && taotao[j] != 0)
    {
    j=j-1;
    account++;
    break;
    }
    }
    }
    cout << m - account;
    return 0;
    }

  • 0
    @ 2018-09-14 12:17:55

    //
    // main.cpp
    // algorithm
    //
    // Created by apple on 2018/9/7.
    // Copyright © 2018 apple. All rights reserved.
    //

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <map>
    #include <vector>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <cmath>
    #include <iomanip>
    #include <set>
    #include <cstring>

    using namespace std;

    int n, m;
    vector<int> ha, ht;

    int main(){
    cin.sync_with_stdio(false);
    cin >> n >> m;
    int iv;
    for(int i = 0; i < n; i++){cin >> iv; ha.push_back(iv);}
    for(int i = 0; i < m; i++){cin >> iv; if(iv != 0) ht.push_back(iv);}
    if(ht.size() == 0) {
    cout << m << endl;
    return 0;
    }
    sort(ht.begin(), ht.end());
    int ans = m;
    for(int i = 0; i < n; i++){
    int pos = lower_bound(ht.begin(), ht.end(), ha[i]) - ht.begin();
    if(pos > 0){
    ans--;
    ht.erase(ht.begin() + pos - 1);
    }
    }
    cout << ans << endl;
    return 0;
    }

    //之前几次lower_bound都用错了, WA了好几次, 返回的是大于等于要找值的第一个数.

  • 0
    @ 2018-09-14 12:17:54

    //
    // main.cpp
    // algorithm
    //
    // Created by apple on 2018/9/7.
    // Copyright © 2018 apple. All rights reserved.
    //

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <map>
    #include <vector>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <cmath>
    #include <iomanip>
    #include <set>
    #include <cstring>

    using namespace std;

    int n, m;
    vector<int> ha, ht;

    int main(){
    cin.sync_with_stdio(false);
    cin >> n >> m;
    int iv;
    for(int i = 0; i < n; i++){cin >> iv; ha.push_back(iv);}
    for(int i = 0; i < m; i++){cin >> iv; if(iv != 0) ht.push_back(iv);}
    if(ht.size() == 0) {
    cout << m << endl;
    return 0;
    }
    sort(ht.begin(), ht.end());
    int ans = m;
    for(int i = 0; i < n; i++){
    int pos = lower_bound(ht.begin(), ht.end(), ha[i]) - ht.begin();
    if(pos > 0){
    ans--;
    ht.erase(ht.begin() + pos - 1);
    }
    }
    cout << ans << endl;
    return 0;
    }

    //之前几次lower_bound都用错了, WA了好几次, 返回的是大于等于要找值的第一个数.

  • 0
    @ 2018-09-08 23:51:28

    #include<iostream>
    #include<algorithm>
    using namespace std;
    bool compare(int a, int b) {
    return a > b;
    }
    int main() {
    int a[2000];
    int b[2000];
    int n, m;
    int sum = 0;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    }
    for (int i = 0; i < m; i++)
    scanf("%d", &b[i]);
    sort(b, b + m, compare);
    sort(a, a + n, compare);
    for (int i = 0; i < n; i++) {
    for(int j=0;j<m;j++)
    if (a[i] > b[j] && b[j] > 0) {
    sum++;
    b[j] = 0;
    break;
    }
    }
    cout << m - sum << endl;
    return 0;
    }

  • 0
    @ 2018-08-06 17:59:34
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int main()
    {
        int apple[2000]={0},tao[2000]={0};
        int anum,tnum,i,j,temp,sum = 0;
        scanf("%d%d",&anum,&tnum);
        for(i = 0; i < anum; i++)
            scanf("%d",apple+i);
        for(i = 0; i < tnum; i++)
            scanf("%d",tao+i);
        for(i = 0; i < anum; i++)
        {
            temp = 0;
            while((tao[temp] >= apple[i] || tao[temp] == 0) && temp != tnum)
                temp++;
            if(temp == tnum)
                continue;
            for(j = temp + 1; j < tnum; j++)
            {
                if(tao[j] < apple[i] && tao[j] != 0 && tao[temp] < tao[j])
                    temp = j;
            }
            sum++;
            tao[temp] = 0;
        }
        printf("%d\n",tnum - sum);
        return 0;
    }
    
    
  • 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;
    }
    
  • 0
    @ 2017-06-18 12:20:22

    太粗心了,醉

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int c = 0;
    
    bool down(int a, int b){
        return a > b;
    }
    
    int main(){
        int n = 0, m = 0;
        cin >> n >> m;
        int apples[n], tt[m];
        for (int i = 0; i < n; i++) cin >> apples[i];
        for (int i = 0; i < m; i++) cin >> tt[i];
        sort(tt, tt + m, down);
        sort(apples, apples + n, down);
        for (int i = 0; i < n; i++){
            for (int j = 0; j < m; j++){
                if (tt[j] < apples[i] && tt[j] > 0){
                    tt[j] = -1;
                    break;
                }
            }
        }
        for (int i = 0; i < m; i++){
            if (tt[i] != -1) c++;
        }
    
        cout << c << endl;
        return 0;   
    }
    
  • 0
    @ 2017-05-13 19:59:51

    也就那样吧 c++的
    #include<iostream>
    #include<cstdio>

    using namespace std;

    const int maxn = 2005;
    int apple[maxn];
    int taotao[2000];

    int main(){
    int n,m;
    cin >> n >> m;
    for(int i = 1; i < n+1;i++){
    cin >> apple[i];
    }
    for(int i = 1; i < m+1;i++){
    cin >> taotao[i];
    }
    for(int i = 1; i < m+1;i++){
    for(int j = i+1;j < m+1;j++){
    if(taotao[i] > taotao[j]){
    int temp = taotao[i];
    taotao[i] = taotao[j];
    taotao[j] = temp;
    }
    }
    }
    for(int i = 1;i < n+1; i++){
    for(int j = i+1 ;j< n +1 ; j++){
    if(apple[i] > apple[j]){
    int temp = apple[i];
    apple[i] = apple[j];
    apple[j] = temp;
    }
    }
    }
    for(int i = n;i > 0;i--){
    for(int j = m;j > 0;j--){
    if(apple[i] > taotao[j] && taotao[j] > 0){
    taotao[j]=-1;
    break;
    }
    }
    }
    int counter = 0;
    for(int i = 1;i <= m;i++){
    if(taotao[i]!=-1){
    counter++;
    }
    }
    cout<<counter<<endl;
    return 0 ;
    }

信息

ID
1291
难度
6
分类
贪心 点击显示
标签
(无)
递交数
8954
已通过
2151
通过率
24%
上传者