-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1948B.cpp
More file actions
116 lines (103 loc) · 2.44 KB
/
1948B.cpp
File metadata and controls
116 lines (103 loc) · 2.44 KB
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
#include <bits/stdc++.h>
using namespace std;
struct Node
{
int data;
Node *next;
Node(int data)
{
this->data = data;
this->next = nullptr;
}
};
int getdigit(int num)
{
int digit = 0;
while (num != 0)
{
num /= 10;
digit++;
}
return digit;
}
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
Node *head = nullptr, *tail = nullptr;
for (int i = 0; i < n; i++)
{
int val;
cin >> val;
Node *newnode = new Node(val);
if (!head)
head = tail = newnode;
else
{
tail->next = newnode;
tail = newnode;
}
}
Node *prev = nullptr;
Node *temp = head;
bool yes = true;
while (temp && temp->next)
{
int p_f = temp->data;
int p_s = temp->next->data;
int d_f = getdigit(p_f);
if ((p_f > p_s) && (d_f == 1))
{
cout << "NO\n";
yes = false;
break;
}
else if (p_f > p_s)
{
vector<int> digit_arr;
int num = p_f;
while (num)
{
digit_arr.push_back(num % 10);
num /= 10;
}
if (digit_arr.empty())
digit_arr.push_back(0);
reverse(digit_arr.begin(), digit_arr.end());
Node *new_head = nullptr, *new_tail = nullptr;
for (int d : digit_arr)
{
Node *node = new Node(d);
if (!new_head)
new_head = new_tail = node;
else
{
new_tail->next = node;
new_tail = node;
}
}
if (prev)
prev->next = new_head;
else
head = new_head;
new_tail->next = temp->next;
temp = head;
prev = nullptr;
}
else
{
prev = temp;
temp = temp->next;
}
}
if (yes)
{
cout << "YES\n";
}
}
return 0;
}