249 条题解
-
5不退 LV 8 @ 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; }
-
32018-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; }
-
22018-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; }
-
22018-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. -
22017-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; }
-
12022-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
-
12020-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(); }
-
12020-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
-
12020-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; }
-
12019-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;
} -
12019-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;
} -
12009-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. -
02023-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; }
-
02021-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;
} -
02020-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);
}
``` -
02018-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;
} -
02018-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;
} -
02017-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个点)还有苹果的高度一定要**大于**陶陶的高度
-
02017-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;
} -
02017-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; }