京东采购单,求大神看下哪里错了,60%死活过不了

//方法有点蠢,见笑。
public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while (in.hasNext()) {
			int min = 0;
			int max = 0;
			String str = in.nextLine();
			String[] s1 = str.split(" ");
			int n = Integer.valueOf(s1[0]);
			int m = Integer.valueOf(s1[1]);
			String str2 = in.nextLine();
			String[] s2 = str2.split(" ");
			int[] money = new int[n];
			for (int i = 0; i < n; i++) {
				money[i] = Integer.valueOf(s2[i]);
			}
			Map<String,Integer> map = new HashMap<>();
			for(int i = 0;i<m;i++){
				String s = in.nextLine();
				if(map.containsKey(s)){
					map.put(s, map.get(s)+1);
				}else{
					map.put(s, 1);
				}
			}
			Arrays.sort(money);
			int[] num = new int[map.size()];
			int i=0;
			for(Map.Entry<String,Integer> s : map.entrySet()){
				num[i] = s.getValue();
				i++;
			}
			Arrays.sort(num);
			int length = num.length;
			for(int j=0;j<length;j++){
				min = min+ (num[length-j-1]*money[j]);
				max = max+ (num[length-j-1]*money[n-j-1]);
			}
			System.out.println(min + " " + max);
		}
	}

全部评论
我靠,刚开始就想到这个思路了,想到数组,想到hashmap了,关键min = min+ (num[length-j-1]*money[j]);这一步时我思维定式在将 String[] s2 = str2.split(" ");这个数组扩充,而不是直接求和。还是太嫩了。
点赞 回复 分享
发布于 2016-09-05 22:46
你不是拿到网易offer了??
点赞 回复 分享
发布于 2016-09-05 22:18
#include "iostream" #include "string" #include "cstdio" #include "vector" #include "map" #include "algorithm" using namespace std; int cmp(pair<string, int > a,pair<string, int > b) {     return a.second>b.second; } int main() {     int n,m;     while (cin>>n>>m)     {         map<string, int > ma;         string t;         int price[ 1000 ]={ 0 };         for ( int i= 0 ;i<n;++i)             cin>>price[i];         sort(price,price+n);         for ( int i= 0 ;i<m;++i)         {             cin>>t;             ma[t]++;         }                  vector<pair<string, int > >v(ma.begin(),ma.end());         sort(v.begin(),v.end(),cmp);                           int mx= 0 ,mn= 0 ;         int size=v.size();         for ( int i= 0 ;i<size;++i)             mn+=price[i]*v[i].second;         int k= 0 ;         for ( int i=n- 1 ;i>=n-size;--i)             mx+=price[i]*v[k++].second;                  cout<<mn<< " " <<mx<<endl;     } }
点赞 回复 分享
发布于 2016-09-05 21:22

相关推荐

能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务