Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
hievM
0 / 0 / 0
Регистрация: 30.03.2018
Сообщений: 2
1

Переписать код с Java на С++

30.03.2018, 10:27. Просмотров 386. Ответов 5

Есть код Джава, и его необходимо переписать на С++
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Vector;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br =  new BufferedReader(new FileReader(new File("input.txt")));
        String[] nAuthority = br.readLine().split(" ");
        int n = Integer.parseInt(nAuthority[0]);
        int authority = Integer.parseInt(nAuthority[1]);
        int[] a = new int [n], b = new int [n];
        for (int i = 0; i < n; ++i) {
            String[] ab = br.readLine().split(" ");
            a[i] = Integer.parseInt(ab[0]);
            b[i] = Integer.parseInt(ab[1]);
        }
 
        Friend[] convincesFriends = (new Main(authority, a, b)).convinceMaxFriends();
        BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"));
        bw.write(convincesFriends.length+"\n");
        for (Friend friend : convincesFriends) {
            bw.write(friend.index+" ");
        }
        bw.flush();
    }
 
    private Friend[] friends;
    private int authority;
    private Main(int authority, int a[], int b[]) {
        this.authority = authority;
        friends = new Friend[a.length];
        for (int i = 0; i < friends.length; ++i) {
            friends[i] = new Friend(a[i], b[i], i+1);
        }
    }
 
    Comparator < Friend > sortCompare = new Comparator<Friend>() {
        @Override
        public int compare(Friend o1, Friend o2) {
            return o2.a+o2.b-o1.a-o1.b;
        }
    };
 
    private Friend[] solveNegativeDp(Friend[] negative) {
        Arrays.sort(negative, sortCompare);
 
        Integer[][] maxBSum = new Integer[negative.length+1][negative.length+1];
        maxBSum[0][0] = 0;
        for (int i = 1; i <= negative.length; ++i) {
            maxBSum[i][0] = 0;
            for (int j = 1; j <= negative.length; ++j) {
                if (maxBSum[i-1][j-1] != null && authority + maxBSum[i-1][j-1] >= negative[i-1].a) {
                    maxBSum[i][j] = maxBSum[i-1][j-1] + negative[i-1].b;
                }
                if (maxBSum[i][j] == null || maxBSum[i-1][j] != null && maxBSum[i-1][j] >= maxBSum[i][j]) {
                    maxBSum[i][j] = maxBSum[i-1][j];
                }
            }
        }
 
        int j, i = negative.length;
        for (j = negative.length; maxBSum[i][j] == null; --j);
 
        Friend[] negativeAdded = new Friend[j];
        for (; i >= 0 && j > 0; --i) {
            if (maxBSum[i][j] != maxBSum[i-1][j]) {
                negativeAdded[--j] = negative[i-1];
            }
        }
 
        return negativeAdded;
    }
 
    private Friend[] solveNegativeGreedy(Friend[] negative) {
        Arrays.sort(negative, sortCompare);     
 
        PriorityQueue<Friend> negativeAdded = new PriorityQueue<>(1, new Comparator<Friend>() {
            @Override
            public int compare(Friend o1, Friend o2) {
                return o1.b - o2.b;
            }
        });     
        for (Friend friend : negative) {
            if (authority >= friend.a) {
                authority += friend.b;
                negativeAdded.add(friend);
            } else if (!negativeAdded.isEmpty() && authority - negativeAdded.peek().b >= friend.a && negativeAdded.peek().b < friend.b) {
                authority = authority - negativeAdded.poll().b + friend.b;
                negativeAdded.add(friend);
            }
        }
 
        Friend[] answer = negativeAdded.toArray(new Friend[negativeAdded.size()]);
        Arrays.sort(answer, sortCompare);
        return answer;
    }
 
    private Friend[] convinceMaxFriends(){
        Vector < Friend > convinced = new Vector<>();
        Vector < Friend > positive = new Vector<>();
        for (int i = 0; i < friends.length; ++i) {
            if (friends[i].b >= 0) {
                positive.add(friends[i]);
            }
        }
 
        positive.sort(new Comparator<Friend>() {
            @Override
            public int compare(Friend o1, Friend o2) {
                return o1.a - o2.a;
            }
        });
 
        for (Friend friend : positive) {
            if (authority >= friend.a) {
                authority += friend.b;
                convinced.add(friend);
            }
        }
 
        Friend[] negative = new Friend[friends.length - positive.size()];
        for (int i = 0, j = 0; i < friends.length; ++i) {
            if (friends[i].b < 0) {
                negative[j++] = friends[i];
            }
        }
 
 
        convinced.addAll(Arrays.asList(solveNegativeGreedy(negative)));
 
        return convinced.toArray(new Friend[convinced.size()]);
    }
 
    private class Friend {
        private int a, b, index;
        private Friend(int a, int b, int index) {
            this.a = a;
            this.b = b;
            this.index = index;
        }
    }
 
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2018, 10:27
Ответы с готовыми решениями:

Переписать код с Java на С++

Задать два стека, поменять информацию местами (переписать код с Java на C++)
Уважаемые сишники. Задача такова:&quot;Задать два стека, поменять информацию местами.&quot; Есть код на...

Как переписать программу с Java на C++
Собственно вопрос в теме. Вот Код Java. Надо переписать на код С++ package pkg3; import...

Как переписать задачи на С++, решенные ранее на Java?
Имеется 10 задач на яве. Помогите сделать на С++. 1. Сумма чисел до 0. public static void main...

Пытаюсь переписать код с циклом for, в код с циклом while, но не совсем получается
Возникло пару вопросов: #include &lt;iostream&gt; using namespace std; int main () { for (int i...

5
Croessmah
++Ͻ
15816 / 8951 / 1719
Регистрация: 27.09.2012
Сообщений: 21,994
Записей в блоге: 2
Завершенные тесты: 2
30.03.2018, 11:02 2
Цитата Сообщение от hievM Посмотреть сообщение
его необходимо переписать на С++
Мы здесь причем?
0
hievM
0 / 0 / 0
Регистрация: 30.03.2018
Сообщений: 2
30.03.2018, 11:12  [ТС] 3
Просто реально нужна помощь) Знаю только С++, а учить Яву чтобы разобрать код времени нету)
0
SuperKir
455 / 412 / 286
Регистрация: 10.03.2015
Сообщений: 1,765
Завершенные тесты: 1
30.03.2018, 13:33 4
hievM, так напиши сам весь код на С++, согласно заданию.
0
Kastaneda
Jesus loves me
Эксперт С++
5052 / 3070 / 351
Регистрация: 12.12.2009
Сообщений: 7,767
Записей в блоге: 2
Завершенные тесты: 1
30.03.2018, 19:58 5
Цитата Сообщение от hievM Посмотреть сообщение
а учить Яву чтобы разобрать код времени нету
Не надо ничего учить, тот же сиподобный синтаксис + минимальная интуиция, этого достаточно для переписывания на С++.

P.S. Ява - это мотоцикл!
0
vlisp
653 / 582 / 117
Регистрация: 10.08.2015
Сообщений: 2,417
Завершенные тесты: 1
30.03.2018, 20:08 6
вот для чего пишут комментарии
0
30.03.2018, 20:08
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2018, 20:08

Переписать код с Си
FILE *f; char s = {0}; f=fopen(&quot;filename.txt&quot;,&quot;rt&quot;); char buff; ...

Переписать код на с++
uses crt; const n=6; var x,i,j:integer; a:array of integer; begin randomize; ...

Переписать код
нужна помощь в изменении когда. данный код #include &lt;iostream&gt; using namespace std; double...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.