二分查找课后作业
已结束
ACM/ICPC
开始于: 2024-12-4 13:00
604
小时
主持人:
39
3055:【基础】同时出现的数
#include<bits/stdc++.h> using namespace std; #define N 100005 int n,m,a[N],b[N]; void binary(int y){ int left =1,right = n,mid; while(left<=right){ mid = left+(right-left)/2; if(a[mid]==y) { cout<<y<<" "; return; } else if(a[mid]>y) right = mid-1; else left = mid+1; } } 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++){ scanf("%d",&b[i]); } sort(a+1,a+n+1); sort(b+1,b+m+1); for(int i=1;i<=m;i++){ binary(b[i]); } }
1535:【基础】最满意的方案
#include<bits/stdc++.h> using namespace std; int main() { int m, n; int a[100000]; int x; long long sum = 0; cin >> m >> n; for (int i = 0; i < m; i++) { scanf("%d", &a[i]); } sort(a, a + m); for (int i = 0; i < n; i++) { scanf("%d", &x); int l = 0, r = m - 1, ans = INT_MAX; while (l <= r) { int mid = (l + r) / 2; ans = min(ans, abs(x - a[mid])); if (a[mid] >= x) { r = mid - 1; } else { l = mid + 1; } } sum += ans; } cout << sum; return 0; }
#include<bits/stdc++.h> using namespace std; #define N 1000050 #define ll long longll m,s=0,n,a[N],b[N]; //a是学校,b学生 void binary(int x){ ll left = 1; ll right = m; ll mid; while(left<=right){ mid=left+(right-left)/2; if(a[mid]>=x) right=mid-1; else left=mid+1; } s+=min(a[left]-x,x-a[left-1]);
}
int main(){ scanf("%lld %lld",&m,&n); for(int i=1;i<=m;i++){ scanf("%lld",&a[i]); } for(int i=1;i<=n;i++){ scanf("%lld",&b[i]); } sort(a+1,a+m+1); for(int i=1;i<=n;i++){ if(b[i]<a[1]) s+=a[1]-b[i]; else if(b[i]>a[m]) s+=b[i]-a[m]; else{ binary(b[i]); } } printf("%lld",s); return 0; }
</div>
3019:【入门】二分查找满足条件的数
1541:【入门】起止位置
1511:小X算排名
- 状态
- 已结束
- 规则
- ACM/ICPC
- 题目
- 5
- 开始于
- 2024-12-4 13:00
- 结束于
- 2024-12-29 17:00
- 持续时间
- 604 小时
- 主持人
- 参赛人数
- 39