3 条题解
-
1
其实就是在找与每个学生的估分差最小的学校录取线的差值,设当前学生估分是 ,那么最小差值 第一个大于等于 的数据 和 第一个小于等于 的数据的最小值。
#include <bits/stdc++.h> using namespace std; int n,m,x,ans; int a[100001]; int main(){ cin>>n>>m; for (int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); while (m--){ cin>>x; //特判两种特殊情况 if (x>a[n]){ ans+=x-a[n]; continue; } if (x<a[1]){ ans+=a[1]-x; continue; } int l=1,r=n; while (l<=r){ int mid=(l+r)>>1; if (a[mid]>=x){ r=mid-1; }else{ l=mid+1; } } ans+=min(a[l]-x,x-a[l-1]); } cout<<ans; return 0; }
-
1
“真”错的
#include <bits/stdc++.h> using namespace std; int a[100005],b[100005]; int main() { int m,n; cin >> n >> m; for(int i=1;i<=n;i++) { cin >> a[i]; } for(int i=1;i<=m;i++) { cin >> b[i]; } sort(a+1,a+1+n); int ans=0; for(int i=1;i<=m;i++) { int l=1,r=n+1; while(l<r) { int mid=(l+r)/2; if(a[mid]<=b[i]) { l=mid+1; } else { r=mid; } } if(b[i]<=a[1]) { ans+=a[1]-b[i]; } else { ans+=min(abs(a[l-1]-b[i]),abs(a[l]-b[i])); } } cout << ans; }
-
-1
错的别复制
#include <bits/stdc++.h> using namespace std; int main() { int m,n,a[200000],b[200000],sum=0; cin >> m >> n; for(int i=1;i<=m+n;i++) { cin >> a[i]; if(i<=m) { b[i]=1; } else { b[i]=0; } } for(int i=1;i<=m+n;i++) { for(int j=1;j<=m+n;j++) { if(a[i]>a[j]) { int c=a[i]; a[i]=a[j]; a[j]=c; int d=b[i]; b[i]=b[j]; b[j]=d; } } } for(int i=1;i<=m+n;i++) { if(i==1&&b[i]==0) { continue; } if(b[i]==0) { if(a[i]-a[i-1]>a[i+1]-a[i]) { sum+=a[i+1]-a[i]; } else { sum+=a[i]-a[i-1]; } } } cout << sum; }
- 1
信息
- ID
- 895
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 62
- 已通过
- 30
- 上传者