一样的思路Java过不了C++可以,why
验证map里面的数据也是一模一样 为什么Java就挂了 求助!!
c++:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
typedef long long ll;
const int mod = 1e9+7;
const double eps = 1e-10;
const int maxn = 1e6+10;
using namespace std;
map<int,int> mp;
int n,x;
char s;
int INF = 0x7fffffff;
int main(){
scanf("%d",&n);
for(int i = 0;i < n;i++){
scanf("%d %c",&x,&s);
if(s == '.'){
mp[x]++;
mp[x+1]--;
}
if(s == '+'){
mp[-INF]++;
mp[x]--;
}
if(s == '-'){
mp[x+1]++;
mp[INF]--;
}
}
int ans = 0,sum = 0;
for(auto x:mp){
sum += x.second;
ans = max(ans,sum);
}
cout<<ans<<endl;
return 0;
}
Java:
package 入门赛一;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;
public class Test4 {
static int n;
static int INF = 0x7fffffff;
static Map<Integer, Integer> map = new TreeMap<>();
public static void main(String[] args) throws IOException{
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer re = new StreamTokenizer(r);
re.nextToken(); n = (int)re.nval;
for(int i = 0;i < n;i++){
re.nextToken(); int x = (int)re.nval;
char y = r.readLine().trim().charAt(0);
if(y == '.'){
if(map.get(x) != null) map.put(x,map.get(x)+1);
else map.put(x, 1);
if(map.get(x+1) != null) map.put(x+1,map.get(x+1)-1);
else map.put(x+1, -1);
}
if(y == '+'){
if(map.get(x) != null) map.put(x,map.get(x)-1);
else map.put(x, -1);
if(map.get(-INF) != null) map.put(-INF, map.get(-INF)+1);
else map.put(-INF, 1);
}
if(y == '-'){
if(map.get(x+1) != null) map.put(x,map.get(x+1)+1);
else map.put(x+1, 1);
if(map.get(INF) != null) map.put(INF, map.get(INF)-1);
else map.put(INF, -1);
}
}
int sum = 0;
int ans = 0;
for(Entry<Integer, Integer> entry : map.entrySet()){
// System.out.println(entry.getKey()+" "+entry.getValue());
sum += entry.getValue();
ans = Math.max(sum, ans);
}
System.out.println(ans);
}
}
