2 条题解
-
0
题目分析
表示关闭第 个农场的时间, 表示到第 个农场的初始时间,用 要想在关闭前到达第 个农场的最晚时间,此时我们只需要把 数组从大到小排序即可,只要看第 个是否能按时到达即可。因为数组有序,如果能到达,说明所有比他小的农场都可以到达。
注意
sort 函数实现的是数组从小到大排序,如果想要从大到小有两种实现方法,第一种是自己编写一个 cmp 函数;第二种方法,也是本篇用到的方法,利用 reverse 函数反转已经排完序,从小到大的数组,就可以实现从大到小,reverse 函数的使用方法和 sort 函数相同,具体请看代码。
代码
#include<bits/stdc++.h> using namespace std; int n,q; int c[200005],t[200005]; int late[200005]; int main(){ cin >> n >> q; for(int i=1;i<=n;i++){ cin >> c[i];//关闭时间 } for(int i=1;i<=n;i++){ cin >> t[i];//初始访问时间 } for(int i=1;i<=n;i++){ late[i] = c[i] - t[i];//最晚到达时间 } sort(late+1,late+1+n);//排序 reverse(late+1,late+1+n); for(int i=1;i<=q;i++){ int v,s; cin >> v >> s; if(s < late[v]) cout << "YES";//表示能够到达 else cout << "NO"; cout << endl; } return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=2e5+10; int c[N],t[N]; int main() { ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n,q;cin>>n>>q; for(int i=1;i<=n;i++)cin>>c[i]; for(int i=1;i<=n;i++)cin>>t[i]; for(int i=1;i<=n;i++)c[i]-=t[i]; sort(c+1,c+n+1); while(q--) { int v,s;cin>>v>>s; int vv=(upper_bound(c+1,c+n+1,s)-1)-c; vv=n-vv; if(vv>=v)cout<<"YES\n";else cout<<"NO\n"; } return 0; } ```<br />
- 1
信息
- ID
- 7653
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 143
- 已通过
- 32
- 上传者