题目
带感悟笔记
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class CCF2020122 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
Pair pairs[] = new Pair[m]; //设置一个Pair类,比用map方便多了,大神就是神,呜呜
for(int i=0; i < m; i++) {
int y = sc.nextInt();
int result = sc.nextInt();
Pair pair = new Pair(y,result);
pairs[i] = pair;
}
sc.close();
//使用scanner(system.in)时,使用完毕后,一定要关闭扫描器,
//因为system.in属于IO流,一旦打开,它一直在占用资源,因此使用完毕后切记要关闭。
Arrays.sort(pairs);
int sum[] = new int[m+1];//存放第i对之前判断为1 的个数
sum[0] = 0;
for(int i = 1; i <= m; i++) {
sum[i] = sum[i-1] + pairs[i-1].getY(); //动态规划
}
int max = 0;
int totalsum;
int output = 0;
Set set = new HashSet();
for(int i = 0; i < m; i++) {
int localX = pairs[i].getX();
if(set.contains(localX)) {
continue; //continue跳出本次循环 break终止整个for循环
}
set.add(localX);
int sum0 = i - sum[i]; //第i对之前正确的数量
int sum1 = sum[m] - sum[i];//第i对之后正确的数量
totalsum = sum0 +sum1;
if(totalsum >= max) {
max = totalsum;
output = localX;
}
}
System.out.print(output);
}
static class Pair implements Comparable{
private int x;
private int y;
public int getX() {
return x;
}
public int getY() {
return y;
}
public Pair(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return Integer.compare(this.getX(), ((Pair)o).getX());
}
}
}
代码
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class CCF2020122 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
Pair pairs[] = new Pair[m];
for(int i=0; i < m; i++) {
int y = sc.nextInt();
int result = sc.nextInt();
Pair pair = new Pair(y,result);
pairs[i] = pair;
}
sc.close();
Arrays.sort(pairs);
int sum[] = new int[m+1];
sum[0] = 0;
for(int i = 1; i <= m; i++) {
sum[i] = sum[i-1] + pairs[i-1].getY();
}
int max = 0;
int totalsum;
int output = 0;
Set set = new HashSet();
for(int i = 0; i < m; i++) {
int localX = pairs[i].getX();
if(set.contains(localX)) {
continue;
}
set.add(localX);
int sum0 = i - sum[i];
int sum1 = sum[m] - sum[i];
totalsum = sum0 +sum1;
if(totalsum >= max) {
max = totalsum;
output = localX;
}
}
System.out.print(output);
}
static class Pair implements Comparable{
private int x;
private int y;
public int getX() {
return x;
}
public int getY() {
return y;
}
public Pair(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return Integer.compare(this.getX(), ((Pair)o).getX());
}
}
}
结果
开始时知道这个要用前缀和 就闷头哼哧哼哧的写 写了几个小时最后还是70% 还是去看大神的代码了 还是要多喝别人学习