249 条题解
-
5
不退 LV 8 @ 6 年前
不知道这个题为什么难度6……
可能有两个坑:
1.苹果只能摘高度小于它的陶陶,高度和它相等的不能摘。
2.高度为0的陶陶不能摘。
但其实讲道理认真读题的话这两点都可以规避……
方法就是纯模拟,没什么好说的……直接上代码,应该说比较简洁…… -
37 年前@
水。。。。
-
26 年前@
既然n和m都是2000,而最大高度是300,那么为什么要让复杂度变成2000乘2000呢,反手就是一份300乘2000的。
-
27 年前@
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. -
27 年前@
纯粹模拟。题目最后要考虑到不能摘的,位置为0的陶陶。
读程序注释:harvester(收割者)是苹果,fruit(果实)是可怜的陶陶。
就是这样。恩恩。程序没有任何技术含量。 -
12 年前@
给大家公布一下我自己写的代码(不参考任何人,易理解,不调用除iostream以外的头文件)
有帮助的扣个1
-
14 年前@
-
15 年前@
抄@不退 的😝
补充一下:测试点全a
-
15 年前@
-
15 年前@
和你们的很像,但真是我自己写的:
#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;
} -
15 年前@
来一个简洁的
#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;
} -
115 年前@
编译通过...
├ 测试数据 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. -
01 年前@
-
03 年前@
#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;
} -
04 年前@
用了一下优先队列 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);
}
``` -
06 年前@
#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;
} -
06 年前@
#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;
} -
07 年前@
从一年前做到今天的题目啊,算法很水,但一定要记住,高度为0的陶陶不能摘,不能摘,不能摘(9个点)还有苹果的高度一定要**大于**陶陶的高度
-
07 年前@
#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;
} -
07 年前@