NC53188. 画展
描述
输入描述
从标准输入中读取数据。
第一行两个整数N和M。
接下来N行,第i行为两个整数和。
接下来M行,第i行为一个整数。
输出描述
输出数据到标准输出中。
输出一行一个整数,表示你最多能展出的画的数量。
示例1
输入:
3 4 10 20 5 1 3 5 4 6 10 4
输出:
2
说明:
在这个样例中,一个合法的方案是:从左往右,第二幅画放在第二个框中,第一幅画放在第三个框中。示例2
输入:
3 2 1 2 1 2 1 2 1 1
输出:
2
示例3
输入:
4 2 28 1 8 8 6 10 16 9 4 3
输出:
0
示例4
输入:
8 8 508917604 35617051 501958939 840246141 485338402 32896484 957730250 357542366 904165504 137209882 684085683 775621730 552953629 20004459 125090903 607302990 433255278 979756183 28423637 856448848 276518245 314201319 666094038 149542543
输出:
3
C++11(clang++ 3.9) 解法, 执行用时: 109ms, 内存消耗: 4600K, 提交时间: 2020-04-12 15:43:09
#include <bits/stdc++.h> using namespace std; pair<int, int> a[1000000]; int b[1000000], n, m, ans,i,j; int main() { cin >> n >> m; for (i = 1; i <= n; i++) scanf("%d%d", &a[i].second, &a[i].first); for ( i = 1; i <= m; i++) scanf("%d", &b[i]); sort(a + 1, a + n + 1); sort(b + 1, b + m + 1); i=n; j=m; while(i>0&&j>0) { if (b[j] >= a[i].second) { ans++, j--;} i--; } cout << ans << endl; }
C++14(g++5.4) 解法, 执行用时: 189ms, 内存消耗: 2028K, 提交时间: 2020-04-12 18:09:53
#include<bits/stdc++.h> #include<algorithm> using namespace std; const long long int Ma=100005; int N,M; pair<int,int>a[Ma]; long long ci[Ma],ans=0,temp,temp1; int main() { cin>>N>>M; for(int i=1;i<=N;i++) cin>>a[i].second>>a[i].first; for(int i=1;i<=M;i++) cin>>ci[i]; sort(a+1,a+N+1); sort(ci+1,ci+M+1); for(int i=N,j=M;i&&j;i--) if(ci[j]>=a[i].second)ans++,j--; cout<<ans<<endl; return 0; }