B组模拟一__轻重搭配
作者:互联网
//java代码,得分60,运行错误
import java.util.Arrays;
import java.util.Scanner;
//60分 运行错误
public class Main {
public static void main(String[] args) {
Scanner sca=new Scanner(System.in);
int n;
int x=0;
int a[];
n=sca.nextInt();
a=new int[n];
for(int i=0;i<n;i++) {
a[i]=sca.nextInt();
}
Arrays.sort(a);
int flag[]=new int[n];
int mid=n/2,t=a.length,m=0;
for(int i=mid;i>=0;i--) {
if(a[t-1-m]>=2*a[i]) {
//flag[t-1]=flag[i]=1;
m++;
x++;
}
else {
x++;
}
}
x+=t-1-mid-m;
System.out.println(x);
}
}
//官网题解
#include <algorithm>
#include <cstdio>
using namespace std;
int a[500005];
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
sort(a, a + n);
int ans = n, pos = n / 2;
for (int i = 0; i < n / 2; i++) {
while (pos < n && a[pos] < a[i] * 2) pos++;
if (pos == n) break;
ans--;
pos++;
}
printf("%d\n", ans);
return 0;
}
分析: 例:1,3,5,6,7,8,23,45。
我是先用6与45进行匹配的,然后往前推。
原本应该是1先与7进行匹配,然后往后推。
仿佛两种方法都可以。
检查错误1:if判断时要判断mid要小于最右边为匹配的数。
标签:__,java,Scanner,搭配,++,pos,int,ans,轻重 来源: https://blog.csdn.net/qq_42794545/article/details/88138853