#c
Вопрос:
Я просто пытаюсь решить вопрос : ВОПРОС
Поэтому я построил большую часть кода, но не понял, как преобразовать строку с пробелами, содержащими int, в вектор int без sstream, поскольку ограничение по времени составляет 1 секунду, каков наиболее эффективный способ это сделать. Мой код
#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef long long int ll;
map<int, int> Solution(map<int, int> Stack, vector<int> cmnd, int height)
{
int Pos = 1;
bool IsBoxTaken = false;
for (int i = 0; i < cmnd.size(); i )
{
if (cmnd[i] == 0)
{
return Stack;
}
else if (cmnd[i] == 1 amp;amp; Pos>=1)
{
Pos--;
}
else if (cmnd[i] == 2 amp;amp; Pos<Stack.size())
{
Pos ;
}
else if (cmnd[i] == 3)
{
if(Stack[Pos]==0){continue;}
if(IsBoxTaken==false)
Stack[Pos] -= 1;
IsBoxTaken = true;
}
else if (cmnd[i] == 4)
{
if(Stack[Pos]==height){continue;}
if(IsBoxTaken==true)
Stack[Pos] = 1;
IsBoxTaken = false;
}
}
}
int main(int argc, char *argv[])
{
ios_base::sync_with_stdio(false);
cin.tie();
cout.tie();
//Height
int Height;
//No. Of Stacks
int StacksSize;
cin >> StacksSize >> Height;
//Map To Store Stacks
map<int, int> Stack;
for (int i = 1; i <= StacksSize; i )
{
int Dat;
cin>>Dat;
Stack[i]=Dat;
}
string x;
getline(cin,x);
//Now I Want To Convert The String Into Vector of int
vector<int>Cmnd;
Stack = Solution(Stack, Cmnd, Height);
for (int i = 1; i <= Stack.size(); i )
{
cout << Stack[i] << " ";
}
}
Комментарии:
1. Вместо
getline
этого вы могли бы использоватьwhile (cin >> x) { Cmnd.push_back(x); }
2. @JohnnyMopp будет ли это работать, если пользователь нажмет enter после ввода всех цифр?
3. Неважно, я только что прочитал описание.
0
это всегда последнее число:while (cin >> x amp;amp; x != 0) { Cmnd.push_back(x); }
4.
for (int i = 1; i <= Stack.size(); i )
очень хрупкая. Вместо этого используйте цикл ranged for, напримерfor (auto constamp; pair : Stack) { std::cout << pair.second << ' ';
}.5. Ваш отступ в
Solution
функции вводит в заблуждение.