拼多多第一题%40

import java.util.Arrays;
import java.util.Scanner;


public class Main {

static class Bear{
int fight;
int stav;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int nbears = in.nextInt();
int snum = in.nextInt();
int sugers[] = new int[snum];
Bear[] bears = new Bear[nbears];
for(int i=0;i<snum;i++){
sugers[i]=in.nextInt();
}
for(int i=0;i<nbears;i++){
Bear b = new Bear();
b.fight= in.nextInt();
b.stav = in.nextInt();
bears[i] = b;
}
if(nbears==0){
System.out.print(0);
}
Arrays.sort(sugers);
int bearmap[] = new int[nbears];
int sugermap[] = new int[snum];
for(int i=0;i<nbears;i++){
int tid = gettopFight(bearmap,bears);
if(tid!=-1){
bearmap[tid]=1;
eatsuger(tid,bears,sugermap,sugers);
System.out.println(bears[i].stav); //不应该在这里输出,这里顺序是错的
}
}
}
private static void eatsuger(int tid, Bear[] bears, int[] sugermap,
int[] sugers) {
for(int i=sugers.length-1;i>-1;i--){
if(sugermap[i]!=1){
if(bears[tid].stav>=sugers[i]){
//吃掉糖
bears[tid].stav = bears[tid].stav-sugers[i];
sugermap[i]=1;
}
}
}
}
private static int gettopFight(int[] bearmap, Bear[] bears) {
int max = -1;
int num = -1;
for(int i=0;i<bears.length;i++){
if(bearmap[i]!=1){
if(max<bears[i].fight){
max = bears[i].fight;
num = i;
}
}
}
return num;
}

}

#Java工程师#
全部评论
输出顺序和输入进来时候的顺序不一致
点赞 回复 分享
发布于 2017-09-02 17:06
我就差一行代码就应该可以AC的,一行代码,10%和AC之间的差距,我恨那!
点赞 回复 分享
发布于 2017-09-02 17:09
我刚开始也是40%,后来发现按照战斗力把熊排序后,最后输出的时候应该按照原来输入的顺序进行输出。然后就ac了
点赞 回复 分享
发布于 2017-09-02 17:08
我也40%。。。
点赞 回复 分享
发布于 2017-09-02 17:07
其实40%的原因是什么...我也是40%
点赞 回复 分享
发布于 2017-09-02 17:06
#include <iostream> #include <algorithm> #include <vector> using namespace std; class Bear { public: int capacity; int hungry; int num; }; bool myGreater(const Bear &a, const Bear &b) { if (a.capacity > b.capacity) return true; return false; } bool myGreaterI(const Bear &a, const Bear &b) { if (a.num < b.num) return true; return false; } void printBear(const Bear &a) { cout << a.capacity << "   " << a.hungry << endl; } int eat(vector<int> &v, Bear &a) { if (a.hungry <= 0) return 0; for (int i = v.size() - 1; i >= 0; i--) { if (v[i] <= a.hungry) { a.hungry = a.hungry - v[i]; v.erase(v.begin() + i); eat(v, a); return 0; } } return 0; } int main() { int n, m; while (cin >> n >> m) { vector<int> mm;//糖能填充的饥饿值 for (int i = 0; i < m; i++) { int temp; cin >> temp; mm.push_back(temp); } Bear *bb = new Bear[n]; for (int i = 0; i < n; i++) { cin >> bb[i].capacity >> bb[i].hungry; bb[i].num = i; } sort(mm.begin(), mm.end(), less<int>()); sort(bb, bb + n, myGreater); for (int i = 0; i < n; i++) { //for (int j = n - 1; j >= 0; j--) { //if eat(mm, bb[i]); } } sort(bb, bb + n, myGreaterI); //for_each(bb, bb + n, printBear); for (int i = 0; i < n; i++) { cout << bb[i].hungry << endl; } delete[] bb; } return 0; }
点赞 回复 分享
发布于 2017-09-02 17:06

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务