0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 3
1

Перевод кода с Python на C++

13.07.2020, 16:54. Показов 478. Ответов 0
Метки нет (Все метки)

Я пытаюсь перевести следующий код с Python на C++:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from collections import deque
n, k = map(int, input().split())
x, d, ssum = list(map(int, input().split())), deque(), 0
b = deque()
for i in range(k+2):
    b.append((0,[]))
for i in range(n):
    ssum += x[i]
    if i >= k :
        ssum -= x[i - k]
        if d[0] == i - k :
            d.popleft()
    while len(d) and x[d[-1]] >= x[i]:
        d.pop()
    d.append(i)
    if i >= k - 1:
        i1 = (i-1)%(k+1)
        ik = (i-k)%(k+1)
        ii = i%(k+1)
        nb = (b[ik][0] + x[d[0]] * ssum, b[ik][1] + [i - k + 2])
        b[ii] = max(b[i1], nb, key=lambda x: x[0])
print(len(max(b)[1]))
print(*max(b)[1])
Моя попытка:
C++
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
#include <iostream>
#include <deque>
#include <utility>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;
const long long SIZE=1E5+50;
long long a[SIZE];
int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    long long n, k, s=0; cin >> n >> k;
    for(long long i=0; i<n; ++i) cin >> a[i];
    deque<pair<long long, vector<long long>>> b;
    for(long long i=0; i<k+2; ++i) b.push_back(pair<long long, vector<long long>>(0, vector<long long>()));
    deque<long long> d;
    for(long long i=0; i<n; ++i){
        s+=a[i];
        if(k<=i){
            s-=a[i-k];
            if(i-k==d.front()) d.pop_front();
        }
        while(d.size()&&a[i]<=a[d.back()]) d.pop_back();
        d.push_back(i);
        if(k-1<=i){
            long long i1=(i-1)%(k+1), ik=(i-k)%(k+1), ii=i%(k+1);
            pair<long long, vector<long long>> nb(b[ik].first+s*a[d.front()], vector<long long>{b[ik].second, i-k+2});
            if(b[i1].first>nb.first) b[ii]=b[i1]; else b[ii]=nb;
        }
    }
    auto mmax=max_element(b.begin(), b.end()).second;
    cout << mmax.size() << endl;
    copy(mmax.begin(), mmax.end(), ostream_iterator<long long>(cout, " "));
    return 0;
}
Компилятор g++ выдаёт следующие ошибки:
Код
tower.cpp: In function 'int main()':
tower.cpp:27:107: error: no matching function for call to 'std::vector<long long int>::vector(<brace-enclosed initializer list>)'
    pair<long long, vector<long long>> nb(b[ik].first+s*a[d.front()], vector<long long>{b[ik].second, i-k+2});
                                                                                                           ^
In file included from C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/vector:64,
                 from tower.cpp:6:
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:543:2: note: candidate: 'template<class _InputIterator, class> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&)'
  vector(_InputIterator __first, _InputIterator __last,
  ^~~~~~
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:543:2: note:   template argument deduction/substitution failed:
tower.cpp:27:107: note:   deduced conflicting types for parameter '_InputIterator' ('std::vector<long long int>' and 'long long int')
    pair<long long, vector<long long>> nb(b[ik].first+s*a[d.front()], vector<long long>{b[ik].second, i-k+2});
                                                                                                           ^
In file included from C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/vector:64,
                 from tower.cpp:6:
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:515:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = long long int; _Alloc = std::allocator<long long int>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<long long int>]'
       vector(initializer_list<value_type> __l,
       ^~~~~~
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:515:7: note:   no known conversion for argument 1 from 'std::vector<long long int>' to 'std::initializer_list<long long int>'
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:490:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&) [with _Tp = long long int; _Alloc = std::allocator<long long int>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<long long int>]'
       vector(vector&& __rv, const allocator_type& __m)
       ^~~~~~
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:490:7: note:   no known conversion for argument 2 from 'long long int' to 'const allocator_type&' {aka 'const std::allocator<long long int>&'}
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:480:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&, const allocator_type&) [with _Tp = long long int; _Alloc = std::allocator<long long int>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<long long int>]'
       vector(const vector& __x, const allocator_type& __a)
       ^~~~~~
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:480:7: note:   no known conversion for argument 2 from 'long long int' to 'const allocator_type&' {aka 'const std::allocator<long long int>&'}
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:476:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&) [with _Tp = long long int; _Alloc = std::allocator<long long int>]'
       vector(vector&& __x) noexcept
       ^~~~~~
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:476:7: note:   candidate expects 1 argument, 2 provided
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:458:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = long long int; _Alloc = std::allocator<long long int>]'
       vector(const vector& __x)
       ^~~~~~
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:458:7: note:   candidate expects 1 argument, 2 provided
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:427:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const allocator_type&) [with _Tp = long long int; _Alloc = std::allocator<long long int>; std::vector<_Tp, _Alloc>::size_type = long long unsigned int; std::vector<_Tp, _Alloc>::value_type = long long int; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<long long int>]'
       vector(size_type __n, const value_type& __value,
       ^~~~~~
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:427:7: note:   no known conversion for argument 1 from 'std::vector<long long int>' to 'std::vector<long long int>::size_type' {aka 'long long unsigned int'}
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:415:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const allocator_type&) [with _Tp = long long int; _Alloc = std::allocator<long long int>; std::vector<_Tp, _Alloc>::size_type = long long unsigned int; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<long long int>]'
       vector(size_type __n, const allocator_type& __a = allocator_type())
       ^~~~~~
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:415:7: note:   no known conversion for argument 1 from 'std::vector<long long int>' to 'std::vector<long long int>::size_type' {aka 'long long unsigned int'}
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:402:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(const allocator_type&) [with _Tp = long long int; _Alloc = std::allocator<long long int>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<long long int>]'
       vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
       ^~~~~~
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:402:7: note:   candidate expects 1 argument, 2 provided
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:391:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector() [with _Tp = long long int; _Alloc = std::allocator<long long int>]'
       vector()
       ^~~~~~
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_vector.h:391:7: note:   candidate expects 0 arguments, 2 provided
tower.cpp:31:44: error: 'struct std::_Deque_iterator<std::pair<long long int, std::vector<long long int> >, std::pair<long long int, std::vector<long long int> >&, std::pair<long long int, std::vector<long long int> >*>' has no member named 'second'
  auto mmax=max_element(b.begin(), b.end()).second;
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2020, 16:54
Ответы с готовыми решениями:

Перевод кода из python в c++
from tkinter import * import math def Star(n,R,window,star): PointStar = ] x0 =...

Перевод кода с языка Python на язык С++
Привет! знаю как оформить задачу на питоне, но мне нужен этот код на плюсах.. import random ...

Перевод кода из Python в C#
Помогите,пожалуйста, перевести код. Просто язык Python я вообще не знаю. Эта программа- это взлом...

Перевод кода из python в c++
Очень нужна помошь в переводе кода из python в c++, чтобы разобраться в программе. Задача о...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2020, 16:54
Помогаю со студенческими работами здесь

Перевод кода с JS на Python
Здравствуйте уважаемые коллеги есть одна задача, я её решить на js, но честно говоря меня терзает...

Перевод кода с C# на Python
if (message.Type == MessageType.Photo) { string...

Перевод кода с C++ на Python
Кому не трудно, помочь девушке, карма отблагодарит) class Stek { private: int* arr; int...

Перевод кода из С++ в Python
#include &lt;iostream&gt; using namespace std; int main() { double arr={1,2,3,4,5},t,t1; ...

Перевод кода на Python
нужно перевести из C++ в python import java.util.Scanner; public class JavaApplication9 {...

Перевод кода с Python на C#
Здесь кто-нибудь есть, кто разбирается как в Python, так и C#?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru